Pandas
文件读取
Pandas 支持多种格式的数据文件,如 CSV、Excel、JSON、HTML 和 SQL 数据库等。最常用的读取数据的函数是 read_csv()
和 read_excel()
。
pd.read_csv
pd.read_csv(filepath_or_buffer,
sep=',', header='infer',
names=None, index_col=None,
usecols=None, dtype=None,
nrows=None, skiprows=None,
na_values=None, encoding=None)
sep
指定分隔符,默认为制表符“ ,”
header
参数控列名所在的行。默认值:"infer"
自动推断文件的头部行号。
names
参数用于手动指定列名,尤其是在文件没有列名时
index_col
指定哪些列应被用作行索引。
usecols
控制从文件中读取哪些列。
dtype
指定列的数据类型,可以使用 dict 为每列指定不同的数据类型。
# 使用逗号作为分隔符 (CSV 文件)
df = pd.read_csv('file.csv', sep=',')
# 使用制表符作为分隔符 (TSV 文件)
df = pd.read_csv('file.tsv', sep='\t')
数据索引
提供了多种灵活的方式来索引和选取数据,以下是几种常用的索引方式
通过点运算符直接访问 DataFrame 的列,类似于访问对象的属性。适用于列名为合法的Python变量时,即不包含空格、特殊字符等
df[ ] 使用 []
来选取 DataFrame 中的一列或多列,也可以通过切片和条件表达式过滤行。
基于标签(label
)的索引方式,用来索引行、列。可以通过标签同时索引行和列,灵活性较高。
数据过滤
布尔条件过滤
使用布尔条件结合数据索引工具过滤 DataFrame 中的行
多条件过滤: 使用逻辑运算符(&
和 |
)进行多个条件的组合。注意:在多个条件时,需用括号将每个条件括起来。
# 选取 'A' 大于 2 且 'B' 小于 5 的行
df[(df['A'] > 2) & (df['B'] < 5)]
# 选取 'A' 小于 2 或 'B' 大于 5 的行
df[(df['A'] < 2) | (df['B'] > 5)]
行筛选
.query()
使用查询语法过滤 DataFrame,类似 SQL 语句:
df.query('A > 2 and B < 5') # 选取 'A'列 大于 2 且 'B'列 小于 5 的行
snp_list = ["vg0100002827", "vg0100002988"]
cultivated_df.query('SNP in @snp_list') # 使用列表内的元素进行过滤
列相关操作
重命名列
可以通过 rename()
函数只修改特定的列名:
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
# 使用 rename 修改特定列名
df.rename(columns={'A': 'Alpha', 'B': 'Beta'}, inplace=True)
print(df)
-
columns={'A': 'Alpha', 'B': 'Beta'}
指定了要修改的列及其对应的新名称。 -
inplace=True
会直接在原DataFrame
上修改。
如果你只知道列的位置(索引)而不想列出所有列名,可以使用列索引来修改列名:
df.columns.values[0] = 'Alpha' # 修改第一列
df.columns.values[1] = 'Beta' # 修改第二列
df.columns.values[2] = 'Gamma' # 修改第三列
print(df)
筛选列
可以通过列名筛选你需要的列和调整列顺序:
import seaborn as sns
import pandas as pd
df = sns.load_dataset('iris')
# 选择列
df_filtered = df[['sepal_length', 'species']]
# 调整列顺序,只需重新指定列顺序即可。
df_filtered = df_filtered[['species', 'sepal_length']]
# 使用 loc 和 iloc 也可以选择列
df = df.loc[:, ['sepal_length', 'species']]
df = df.iloc[:, [0, 4]]
根据列索引排序调整列顺序:
根据条件来筛选列, 比如,选择数据类型为数值类型的列:
# 筛选出数值类型的列
df_numeric = df.select_dtypes(include=['number'])
# 筛选出字符型列
df_string = df.select_dtypes(include=['object'])
根据列名包含某些特定字符进行筛选:
常用函数
apply函数
用于对 DataFrame 或 Series 进行逐元素操作,或应用一个函数来进行行或列级别的计算。它能够将用户定义的函数应用到 DataFrame 或 Series 的每一行或每一列,或者每个元素,灵活性非常高。
- func:要应用于每个元素的函数。可以是自定义函数、内置函数或 lambda 函数。
- axis:指定应用函数的轴方向。默认为0,表示沿着每列应用函数;1 表示沿着每行应用函数。
- args 和 kwargs:可选参数,用于传递给函数的额外参数和关键字参数。
Series 的 apply
函数: