pandas 是 python 中最强大的数据处理库之一,无论是数据分析、清洗还是可视化,都离不开它。本文整理了 67 个最常用的 pandas 函数,涵盖了从数据导入、查看、清洗、选择、排序、聚合到合并的全过程。建议收藏,随时查阅!
1. 创建与导入数据 (creating & loading data)
数据分析的第一步通常是将数据加载到 dataframe 中。
import pandas as pd
# 自己创建数据框,用于练习
pd.dataframe()
# 从 csv 文件导入数据
pd.read_csv('filename.csv')
# 从限定分隔符的文本文件导入数据
pd.read_table('filename.txt')
# 从 excel 文件导入数据
pd.read_excel('filename.xlsx')
# 从 sql 表/库导入数据
pd.read_sql(query, connection_object)
# 从 json 格式的字符串导入数据
pd.read_json(json_string)
# 解析 url、字符串或者 html 文件,抽取其中的 tables 表格
pd.read_html(url)
2. 导出数据 (exporting data)
处理完数据后,我们通常需要将其保存为各种格式。
# 导出数据到 csv 文件
df.to_csv('filename.csv')
# 导出数据到 excel 文件
df.to_excel('filename.xlsx')
# 导出数据到 sql 表
df.to_sql(table_name, connection_object)
# 以 json 格式导出数据到文本文件
df.to_json('filename.json')
# 将多个数据帧写入同一个工作簿的多个 sheet (工作表)
writer = pd.excelwriter('test.xlsx', index=false)
df1.to_excel(writer, sheet_name='单位')
writer.save() # 注意:在较新版本 pandas 中,推荐使用 with pd.excelwriter(...) as writer: 语法
3. 查看与检查数据 (inspecting data)
在进行复杂操作前,先了解数据的基本结构和概况。
# 查看 dataframe 对象的前 n 行 df.head(n) # 查看 dataframe 对象的最后 n 行 df.tail(n) # 查看行数和列数 df.shape # 查看索引、数据类型和内存信息 df.info() # 查看字段(首行)名称 df.columns # 查看数值型列的汇总统计 df.describe() # 查看 series 对象的唯一值和计数 s.value_counts(dropna=false) # 查看 dataframe 对象中每一列的唯一值和计数 df.apply(pd.series.value_counts) # 查看是否有缺失值 df.isnull().any() # 查看 column_name 字段数据重复的数据信息 df[df['column_name'].duplicated()] # 查看 column_name 字段数据重复的个数 df[df['column_name'].duplicated()].count()
4. 数据选择与索引 (selecting & indexing)
灵活地选取我们需要的数据子集。
# 根据列名,并以 series 的形式返回列 df['col'] # 以 dataframe 形式返回多列 df[['col1', 'col2']] # 按位置选取数据 (series) s.iloc[0] # 按索引选取数据 (series) s.loc['index_one'] # 返回第一行 df.iloc[0, :] # 返回第一列的第一个元素 df.iloc[0, 0] # 返回第一行(索引为默认的数字时,用法同 df.iloc),但需要注意的是 loc 是按索引, iloc 参数只接受数字参数 df.loc[0, :] # 【已弃用】返回字段为 col1 和 col2 的前 5 条数据 # 注意:.ix 在新版 pandas 中已被移除,请使用 .loc 或 .iloc # df.ix[[:5], ["col1", "col2"]] # 选择索引名称为 5,字段名称为 col1 的数据 df.at[5, "col1"] # 选择索引排序为 5,字段排序为 0 的数据 df.iat[5, 0]
5. 数据清洗与转换 (cleaning & transforming)
数据清洗是数据分析中最耗时的部分,掌握这些函数能事半功倍。
# 重命名列名(需要将所有列名列出,否则会报错)
df.columns = ['a', 'b', 'c']
# 检查 dataframe 对象中的空值,并返回一个 boolean 数组
pd.isnull(df)
# 检查 dataframe 对象中的非空值,并返回一个 boolean 数组
pd.notnull(df)
# 删除所有包含空值的行
df.dropna()
# 删除所有包含空值的列
df.dropna(axis=1)
# 删除所有小于 n 个非空值的行
df.dropna(axis=1, thresh=n)
# 用 x 替换 dataframe 对象中所有的空值
df.fillna(value=x)
# 指定列填充缺失值
df['column_name'].fillna(x)
# 将 series 中的数据类型更改为 float 类型
s.astype(float)
# 用 ‘one' 代替所有等于 1 的值
s.replace(1, 'one')
# 用 'one' 代替 1,用 'three' 代替 3
s.replace([1, 3], ['one', 'three'])
# 批量更改列名
df.rename(columns=lambda x: x + 1)
# 选择性更改列名
df.rename(columns={'old_name': 'new_name'})
# 将某个字段设为索引,可接受列表参数,即设置多个索引
df.set_index('column_one')
# 将索引设置为 col1 字段,并将索引新设置为 0, 1, 2...
df.reset_index() # 原文为 df.reset_index("col1"),通常直接调用或传 drop=true
# 批量重命名索引
df.rename(index=lambda x: x + 1)
6. 排序 (sorting)
让数据有序排列,方便观察趋势。
# 对前 5 条数据进行索引排序
df.sort_index().loc[:5]
# 按照列 col1 排序数据,默认升序排列
df.sort_values('col1')
# 按照列 col1 降序排列数据
df.sort_values('col2', ascending=false)
# 先按列 col1 升序排列,后按 col2 降序排列数据
df.sort_values(['col1', 'col2'], ascending=[true, false])
7. 分组与聚合 (grouping & aggregation)
数据透 视和统计分析的核心功能。
# 返回一个按列 col 进行分组的 groupby 对象
df.groupby('col')
# 返回一个按多列进行分组的 groupby 对象
df.groupby(['col1', 'col2'])
# 返回按列 col1 进行分组后,列 col2 的均值
df.groupby('col1')['col2'].agg('mean')
# agg 可以接受列表参数,如 agg([len, np.mean])
# 创建一个按列 col1 进行分组,计算 col2 的最大值和 col3 的最大值、最小值的数据透 视表
df.pivot_table(index='col1', values=['col2', 'col3'], aggfunc={'col2': max, 'col3': [max, min]})
# 返回按列 col1 分组的所有列的均值
df.groupby('col1').agg(np.mean)
# 对特定列聚合
df.groupby('col1')['col2'].agg(['min', 'max'])
# 对 dataframe 中的每一列应用函数 np.mean
data.apply(np.mean)
# 对 dataframe 中的每一行应用函数 np.max
data.apply(np.max, axis=1)
# 通常与 groupby 连用,避免索引更改(返回与原表长度一致的序列)
df.groupby('col1')['col2'].transform("sum")
8. 合并与连接 (merging & joining)
将多个数据表整合成一张大表。
# 【已弃用】将 df2 中的行添加到 df1 的尾部
# 注意:.append() 在 pandas 2.0+ 中已被移除,请使用 pd.concat()
# df1.append(df2)
pd.concat([df1, df2]) # 推荐做法
# 将 df2 中的列添加到 df1 的尾部,值为空的对应行与对应列都不要
df.concat([df1, df2], axis=1, join='inner')
# 对 df1 的列和 df2 的列执行 sql 形式的 join
# 默认按照索引来进行合并,如果 df1 和 df2 有共同字段时,会报错
# 可通过设置 lsuffix, rsuffix 来进行解决
# 如果需要按照共同列进行合并,就要用到 set_index(col1)
df1.join(df2.set_index('col1'), on='col1', how='inner')
# 对 df1 和 df2 合并,按照 col1,方式为 outer
pd.merge(df1, df2, on='col1', how='outer')
# 与 df1.join(df2, how='outer') 效果相同
pd.merge(df1, df2, left_index=true, right_index=true, how='outer')
9.总结
这 67 个函数涵盖了 pandas 使用场景的 80% 以上。熟练掌握它们,你的数据处理效率将得到质的飞跃!
tips:
- 遇到报错时,先检查数据类型 (
df.info()) 和缺失值 (df.isnull())。 - 尽量使用向量化操作(如
apply,map, 直接运算),避免使用for循环遍历 dataframe。 - 注意 pandas 版本更新,部分旧函数(如
ix,append)已被新函数替代。
到此这篇关于一文详解python pandas中67个最常用的数据处理函数的文章就介绍到这了,更多相关python pandas函数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论