python学习:pandas库之DataFrame官方文档简介

本文详细介绍Pandas库的主要功能,包括其核心数据结构Series和DataFrame的使用方法。文章列举了DataFrame的各种操作,如生成、属性获取、数据类型转换、索引、二元运算、数据分组与聚合、缺失值处理等,并提供了丰富的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pandas库是基于Numpy库来创建的,Numpy主要用于矩阵操作,而Pandas主要用于数据处理。

Pandas主要有两种重要的数据结构:Series和DataFrame.

  • Series: 类似一个一维数组,一个Series对应DataFrame的一列
  • DataFrame:类似一个二维数组,一个DataFrame由几个Series列构成。

在我们学习任何一种开源框架,必须得学会阅读其官方文档:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html

根据官方文档,我们先看其最左边的目录:

我们通过对各子目录的简单介绍,来了解DataFrame如何运用:

英文目录中文目录该目录下常用属性/方法
Constructor构造方法可以由numpy数组/字典/DataFrame生成
Attributes and
 underlying data
属性值index:数据表的行索引
columns:数据表的列索引
shape:数据表的形状
dtypes:数据表值的数据类型
Conversion转换astype:转换数据类型
Indexing, iteration索引/迭代iloc/loc/iteritems/iterrows/isin
Binary operator functions二元运算符函数add/sub/mul/div:加减乘除,元素级计算
dot:点乘
df1.combine_first(df2):用df2的值填充df1的空值
Function application,
 GroupBy & Window
apply方法/分组/apply:在数据表中沿着行/列方向调用某方法
groupby:通过mapping/方法/标签/标签集进行分组,返回一个GroupBy对象。GroupBy对象可进行统计学各值计算或调用其apply/agg方法+D15。
agg/aggregate:聚合函数
Computations /
Descriptive Stats
计算/描述性统计describe:输出数据表各列统计值-中位值/方差等
/max/mean/var/corr
Reindexing /
 Selection/
 Label manipulation
重新索引/选择数据/通过标签操作reindex:重命名行/列
rename:可以通过字典的方法重命名行/列
/reset_index/
head:选择前N行数据,默认前5行
tail:选择最后N行数据,默认后5行
drop_duplicates:返回丢弃了重复值的dataframe
duplicated:根据是否是重复值返回布尔值Series
drop
Missing data handling缺失值处理dropna/fillna/replace
Reshaping/
 sorting,/
transposing
改变数组形状/
排序/转换
sort_values:按表中内容值大小排序,
sort_index:按行/列的值大小排序
T:矩阵转置
pivot_table:数据透视表
Combining /
 joining /
 merging
合并/连接append:在数据表末尾添加行数据
/join/
merge:类似SQL的连接,内连接/外连接
Time series-related时间序列 
Plotting绘制图形plot:通过kind参数绘制不同图形
Serialization /
 IO /
 Conversion
读取操作from_csv/to_csv
Sparse稀疏矩阵 
数据分箱技术Binning:pandas.cut()
数据分组技术GroupBy:GroupBy.get_group(groupname1)--> 得到其中一组类别的dataframe

 

 

<think>我们遇到了一个错误:`AttributeError: &#39;str&#39; object has no attribute &#39;copy&#39;`。这个错误发生在调用`project_ptms_onto_splice_events`函数时,具体是在函数内部试图对`splice_data`参数调用`.copy()`方法时发生的。错误信息表明,我们传递给函数的`splice_data`参数是一个字符串(str)对象,而该函数内部期望它是一个具有`copy`方法的数据结构(如pandas DataFrame)。 根据错误堆栈,函数内部执行了以下操作: ```python splice_data = splice_data.copy() ``` 而这里`splice_data`被当作一个字符串,字符串没有`copy`方法(尽管字符串本身是不可变的,通常不需要复制,但这里显然函数期望的是一个DataFrame)。 ### 错误原因分析 1. **参数类型错误**:`project_ptms_onto_splice_events`函数期望的第一个参数`splice_data`应该是一个DataFrame,但实际传入的是一个字符串(文件路径字符串)。 2. **函数使用方式**:从调用方式看,你传递了一个文件路径字符串:`"/mnt/F8AC8D0EAC8CC898/SCLC组学/rmats/my_splice_data.txt"`。然而,函数需要的是已经读取并解析为DataFrame的数据。 ### 解决方案 1. **读取文件**:在调用`project_ptms_onto_splice_events`之前,先使用pandas读取该文件,将文件内容转换为DataFrame。 2. **传递DataFrame**:将读取得到的DataFrame作为参数传递给函数。 ### 具体步骤 假设你的文件是制表符分隔的文本文件(因为扩展名为.txt),我们可以使用`pd.read_csv`来读取,并指定分隔符为制表符`\t`。 修改前的代码: ```python my_splice_data_annotated, spliced_ptms = project.project_ptms_onto_splice_events("/mnt/F8AC8D0EAC8CC898/SCLC组学/rmats/my_splice_data.txt") ``` 修改后的代码: ```python import pandas as pd # 读取剪接事件数据文件 splice_file_path = "/mnt/F8AC8D0EAC8CC898/SCLC组学/rmats/my_splice_data.txt" my_splice_data = pd.read_csv(splice_file_path, sep=&#39;\t&#39;) # 如果是制表符分隔 # 然后调用函数,传入DataFrame my_splice_data_annotated, spliced_ptms = project.project_ptms_onto_splice_events(my_splice_data) ``` ### 注意事项 1. **文件分隔符**:如果文件不是制表符分隔,而是逗号分隔或其他,请调整`sep`参数(例如,使用`sep=&#39;,&#39;`)。 2. **文件编码**:如果文件包含中文路径,且读取时出现编码错误,可以尝试指定编码,如`encoding=&#39;utf-8&#39;`或`encoding=&#39;gbk&#39;`。 3. **函数参数**:确保`project_ptms_onto_splice_events`函数需要的其他参数(如果有)也被正确传递。根据函数文档,可能需要指定一些列名(如染色体列、链列等),但错误中未体现,所以暂时只修正第一个参数。 ### 如果问题仍然存在 如果按照上述修改后仍然出现错误,请检查: - 函数`project_ptms_onto_splice_events`的其他参数是否也需要调整?例如,它可能还要求传递PTM数据的DataFrame,而不仅仅是一个剪接事件数据。 - 查看函数的文档或源码,确认其参数要求。根据ptm_pose的文档,该函数可能需要多个参数,包括剪接事件数据和PTM数据。 根据你提供的错误信息,函数调用时只传递了一个参数(文件路径字符串),但函数可能需要两个参数(剪接事件数据和PTM数据)。因此,请检查函数定义。 ### 函数参数要求 根据ptm_pose中`project_ptms_onto_splice_events`函数的定义(位于`project.py`第321行),该函数需要多个参数。让我们看一下函数签名(从错误信息中我们无法得知全部参数,但通常该函数至少需要剪接事件数据和PTM数据两个DataFrame)。 如果函数要求两个参数,那么正确的调用方式应该是: ```python my_splice_data_annotated, spliced_ptms = project.project_ptms_onto_splice_events(splice_data=my_splice_data, ptm_data=my_ptm_data) ``` 因此,请确保: 1. 你已经读取了PTM数据(另一个文件)到DataFrame。 2. 将两个DataFrame都传递给函数。 ### 总结步骤 1. 读取剪接事件文件为DataFrame(`my_splice_data`)。 2. 读取PTM数据文件为DataFrame(假设为`ptm_data`)。 3. 调用函数:`project.project_ptms_onto_splice_events(my_splice_data, ptm_data)` 或者使用参数名指定。 ### 示例代码(完整) ```python import pandas as pd from ptm_pose import project # 读取剪接事件数据 splice_file = "/mnt/F8AC8D0EAC8CC898/SCLC组学/rmats/my_splice_data.txt" my_splice_data = pd.read_csv(splice_file, sep=&#39;\t&#39;) # 调整分隔符 # 读取PTM数据(假设你有一个PTM数据的文件路径) ptm_file = "path/to/your/ptm_data.txt" # 请替换为实际路径 ptm_data = pd.read_csv(ptm_file, sep=&#39;\t&#39;) # 调整分隔符 # 调用函数 my_splice_data_annotated, spliced_ptms = project.project_ptms_onto_splice_events( splice_data=my_splice_data, ptm_data=ptm_data ) ``` ### 如果不知道PTM数据文件 如果你不确定PTM数据是什么,请查阅该函数的文档或示例,因为它是必需的。通常,PTM数据应包含PTM位点的染色体、位置、修饰类型等信息。 ### 引用说明 在生物信息学分析中,正确处理文件输入和数据类型是避免此类错误的关键[^1]。 §§相关问题§§ 1. 如何使用pandas读取不同分隔符的文本文件? 2. 如何确定ptm_pose中函数的参数要求? 3. 在Python中如何调试`AttributeError`这类错误? 4. 如何为ptm_pose准备PTM数据?</think>### 解决 `ptm_pose` 中的 `AttributeError: &#39;str&#39; object has no attribute &#39;copy&#39;` 错误 这个错误发生在使用 `project_ptms_onto_splice_events` 方法时,核心原因是**函数期望接收 pandas DataFrame 对象,但实际传递了文件路径字符串**。以下是系统化的解决方案: #### 1. **错误原因分析** - **函数预期输入**:`project_ptms_onto_splice_events` 要求第一个参数是 **DataFrame 对象**(已加载的剪接事件数据) - **实际传递内容**:您传递了文件路径字符串(`"/mnt/.../my_splice_data.txt"`) - **错误触发点**:函数内部尝试对字符串执行 `.copy()` 操作(DataFrame 方法) #### 2. **解决方案:正确加载数据** ```python import pandas as pd from ptm_pose import project # 正确读取剪接事件数据(必须是DataFrame) splice_path = "/mnt/F8AC8D0EAC8CC898/SCLC组学/rmats/my_splice_data.txt" my_splice_data = pd.read_csv(splice_path, sep=&#39;\t&#39;) # 根据实际分隔符调整 # 正确读取PTM数据(也必须是DataFrame) ptm_path = "/path/to/your/ptm_data.csv" # 替换为实际路径 ptm_coordinates = pd.read_csv(ptm_path) # 根据格式调整读取参数 # 调用函数(传递DataFrame而非路径) result = project.project_ptms_onto_splice_events( splice_data=my_splice_data, # ✅ 正确传递DataFrame ptm_data=ptm_coordinates, # ✅ 正确传递DataFrame chromosome_col=&#39;chr&#39;, # 替换为实际列名 strand_col=&#39;strand&#39;, # 替换为实际列名 coordinate_type=&#39;hg19&#39; # 根据基因组版本调整 ) ``` #### 3. **关键验证点** 1. **输入类型检查**: ```python print(type(my_splice_data)) # 应输出 <class &#39;pandas.core.frame.DataFrame&#39;> ``` 2. **列名一致性**: ```python # 检查必需列是否存在 required_cols = [&#39;chromosome&#39;, &#39;strand&#39;, &#39;region_start&#39;, &#39;region_end&#39;] assert all(col in my_splice_data.columns for col in required_cols) ``` 3. **坐标格式验证**: - 确保 `coordinate_type` 使用支持的格式(如 `&#39;hg19&#39;` 或 `&#39;hg38&#39;`) - 检查坐标列是否为整数类型: ```python my_splice_data[&#39;region_start&#39;] = my_splice_data[&#39;region_start&#39;].astype(int) ``` #### 4. **错误传递方式 vs 正确方式** ```mermaid graph LR A[错误方式] --> B[传递字符串路径] B --> C[函数尝试 path.copy() 失败] D[正确方式] --> E[先读取为DataFrame] E --> F[传递df对象] F --> G[成功执行 df.copy()] ``` #### 5. **高级调试技巧** 若问题持续,添加类型断言: ```python from ptm_pose import project import pandas as pd def safe_project(splice_path, ptm_path, **kwargs): splice_df = pd.read_csv(splice_path, sep=&#39;\t&#39;) ptm_df = pd.read_csv(ptm_path) # 类型验证 if not isinstance(splice_df, pd.DataFrame): raise TypeError("splice_data 必须是DataFrame") return project.project_ptms_onto_splice_events( splice_data=splice_df, ptm_data=ptm_df, **kwargs ) ``` > **核心原则**:所有数据参数(`splice_data`, `ptm_data`)必须是加载后的 DataFrame,而 `*_col` 参数(如 `chromosome_col`)应传递**列名字符串**[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值