官方资料
api参考文档
官方文档-en
官方文档-cn
pandas的 General functions
盖若pandas速查
| 方法 | 简介 | 示例 |
|---|---|---|
| concat | Concatenate pandas objects along a particular axis with optional set logic along the other axes. | df_result = pd.concat([dataframe1 , dataframe2]) |
常用功能及代码块示例
得到一个DataFrame
创建一个空的dataframe
1 | 指定dataframe的所有字段 |
从文件中读取一个dataframe
1 | 读取Excel |
读取数据时跳过注释信息
在我们实际使用的文件,尤其是一些数据库类型的记录文件中,通过添加注释,文件通常可以更加清晰明了。csv文件中有注释,这种情况是可能存在的。那么,在pandas读取csv文件的时候,如何规避掉注释。
1 | #empty |
我们可以通过设置comment参数,指定某一行是注释,则该行就不会被解析
1 | df = pd.read_csv('D:/1.csv', sep=' ', comment='#') |
只读取指定的列 usecols
1 | df = pd.read_csv('data.csv', usecols=['Name', 'Age']) |
读取文件时指定类型
1 | data_type={"geneID":str, "Gene_symble":str} |
获取DataFrame的信息
查看头尾数据
1 | # 查看开头的N(默认值5) 行 |
随机查看数据
1 | # 随机查看N(默认1 )行数据 |
逐行读取dataframe的每行
DataFrame.iterrows()
1 | for index, row in df.iterrows(): |
DataFrame.itertuples()
1 | for row in df.itertuples(index=True, name='Pandas'): |
itertuples()应该比iterrows()快
获取指定cell的数据信息 iloc
1 | # 获取第i行,c1字段的内容 |
将DataFrame转为List
略麻烦,但是更高效,
1 | from collections import namedtuple |
筛选DataFrame的数据
单个条件筛选
1 | $ print(df) |
多个条件筛选
存在多个比较条件的时候,需要注意
- 多个条件同时满足不能用and,使用 &
- 多个条件满足其中一个即可,不能使用or,使用 |
- 每个条件要使用 小括号
1 | $ print(df) |
筛选常用的数值函数
1 | df.eq() # 等于相等 == |
- 使用单个数值函数筛选
1 | $ df[(df["age"] eq 20)] |
筛选常用的字符型函数
1 | 包含:str.contains |
示例如下:
1 | $ df[(df["name"].str.contains("o"))] |
基于索引筛选
情况比较少,但是特殊情况也会用到
1 | $ df[df.index == 1] |
筛选存在缺失值的行
1 | $ df[df.isnull().values==True] |
更强自定义化的筛选
定义一个函数,进行复杂的逻辑判断;使用apply对dataframe进行系统化批量的处理
1 | def checkfunction(x,y,z): |
更改 dataframe 的内容
整个dataframe的全局替换
1 | # 将所有na替换为特定的values |
整列改为相同的值
1 | DF['sampleName'] = "S1" # 将数据框DF的sampleName列都改为 "S1" |
根据特定条件修改某一列的值
调用DataFrame.apply()方法,可以作用于 Series 或者整个 DataFrame,它自动遍历整个 Series 或者 DataFrame, 对每一个元素运行指定的函数。
更改前最好对数据进行确认,如果在数据中不存在满足条件的记录,导致更改操作处理的是一个空的dataframe 会导致报错
1 | # 使用lambda函数进行操作 |
根据特定条件修改某几列的值
前面介绍了基于dataframe的某几列,更新某一列的值。但是实际使用中,我们也会遇到基于某几列信息,更新dataframe中的某几列值。
这时候,一种方案是每一列值都单独进行更新迭代,但是如果这些结果每次都需要运行获取相关结果,所以显而易见的会显著提升分析耗时(可以使用一些函数的缓存加速方案进行优化)。
所以在这提供一个基于几列内容和一个逻辑函数,对dataframe的多列进行更新的示例代码
1 | # 分布更改 |
更新DataFrame某一列(值位于另一个DataFrame)
1 | import pandas as pd |
将dataframe中的某一列中的文本拆分成多行
示例:
1 | df=df.drop('cont', axis=1).join(df['cont'].str.split('/', expand=True).stack().reset_index(level=1, drop=True).rename('tag')) |
有时候,我们拆分的列可能没有这么直接,那么我们可以自定义函数解析某一列,然后进行拆分
1 | # 输入数据 |
将dataframe中的多列合并成一个新列
1 | data |
dataframe的合并
按列进行合并
- merge (着重关注的是行的合并)
1 | >>> print(df1) |
按行进行拼接
1 | # 将两个dataframe逐行添加 |
dataframe中逐行添加数据
1 | AllSampleFastqQC.loc[len(AllSampleFastqQC)+1] = [SampleDir,SampleDirPath,Chip,lane,barcode,umi,Q20,Q30,GC] |
dataframe 去重
drop_duplicates()函数的语法格式如下:
1 | df.drop_duplicates(subset=['A','B','C'],keep='first',inplace=True) |
