原文:https://www.51cto.com/article/832323.html
一、 IO 操作:数据的输入与输出
这是数据处理的起点与终点。除了 CSV,掌握二进制格式(如 Parquet)能显著提升大数据量的读写效率。
1. pd.read_csv() / pd.read_parquet()
用途:读取数据。read_csv 是标配,但对于GB级别以上的数据,强烈推荐使用 read_parquet,体积更小,速度快 10 倍以上。
技巧:使用 chunksize 参数分块读取超大文件。
2. df.to_csv() / df.to_excel()
用途:数据落地。
技巧:设置 index=False 避免保存无意义的索引列;使用 float_format='%.2f' 控制浮点精度。
3. df.to_pickle()
用途:序列化保存。完美保留 DataFrame 的数据类型(如 Categorical),读取速度极快,适合作为中间存储格式。
4. pd.DataFrame.from_dict()
用途:从字典构建 DataFrame。
场景:爬虫数据入库或 API 响应数据解析时非常常用。
二、 数据预览
在进行任何复杂操作前,必须先了解数据的全貌。
5. df.head() / df.tail()
用途:查看头尾数据。不要只看前 5 行,偶尔看看 tail 能发现文件末尾的异常(如汇总行)。
6. df.info()
用途:查看内存占用、非空计数和字段类型。这是检查 NaN 值和数据类型转换的第一步。
7. df.describe()
用途:快速统计描述。
技巧:使用 include='all' 或 include=['O'] 来查看分类变量的统计信息(如唯一值数量)。
8. df.shape
用途:返回元组 (rows, columns),快速确认数据维度。
9. df.dtypes
用途:检查每一列的数据类型。
10. df.value_counts()
用途:分类统计。
技巧:配合 normalize=True 直接查看占比,配合 dropna=False 查看缺失值的分布。
三、 数据清洗
现实世界的数据往往是“脏”的,这部分函数是数据工程师使用最高频的工具。
11. df.dropna()
用途:删除缺失值。
参数:thresh=n 可以保留至少有 n 个非空值的行,比单纯的 how='any' 更灵活。
12. df.fillna()
用途:填充缺失值。
技巧:除了填充固定值,还可以使用 method='ffill'(前向填充)处理时间序列数据。
13. df.drop_duplicates()
用途:去重。
参数:subset=['col1', 'col2'] 可指定根据特定列去重,keep='last' 保留最新记录。
14. df.astype()
用途:强制类型转换。
技巧:将高基数的字符串列转换为 'category' 类型,可节省高达 90% 的内存。
15. df.rename()
用途:重命名列名或索引。
代码:df.rename(columns={'old_name': 'new_name'}, inplace=True)。
16. df.replace()
用途:值替换。支持字典映射替换,比 apply 更快。
四、 筛选与索引:精准定位
Pandas 的核心灵魂在于其强大的索引系统。
17. df.loc[]
用途:基于标签(Label)的索引。
场景:df.loc[df['age'] > 25, ['name', 'salary']]。
18. df.iloc[]
用途:基于位置(Integer)的索引。
场景:df.iloc[:10, :3] 切片前10行、前3列。
19. df.query()
用途:SQL 风格的字符串查询。
优势:当筛选条件非常复杂时,query 语法比布尔索引更易读。
代码:df.query("age > 25 and department == 'Sales'")。
20. df.isin()
用途:判断值是否存在于列表中,常用于多值筛选。
21. df.filter()
用途:根据列名或索引名筛选。
参数:支持 regex 正则表达式匹配列名,非常强大。
五、 高级变换与特征工程
这是区分新手与专家的分水岭。
22. df.apply()
用途:沿轴应用函数。
注意:apply 循环效率较低,如果逻辑简单,优先使用 Pandas 内置的向量化函数。
23. df.map()
用途:Series 专用的映射方法,常用于数据字典编码转换。
24. df.sort_values()
用途:排序。
参数:ascending=[True, False] 可对多列进行不同方向的排序。
25. df.set_index() / df.reset_index()
用途:索引管理。在 TimeSeries 分析中,通常将时间列 Set 为 Index。
26. df.drop()
用途:删除行或列。需指定 axis=1 删除列。
27. pd.cut() / pd.qcut()
用途:分箱(Binning)。
区别:cut 按数值间隔切分(等宽),qcut 按分位数切分(等频)。
28. str 访问器
用途:处理字符串列。
常用:df['col'].str.contains(), df['col'].str.split(), df['col'].str.replace()。
六、 统计与聚合
将数据从“明细表”变为“汇总表”。
29. df.groupby()
用途:分组。Pandas 的核心功能,遵循 Split-Apply-Combine 模式。
30. df.agg()
用途:聚合。
技巧:可以对不同列应用不同的聚合函数:df.groupby('dept').agg({'salary': 'mean', 'age': 'max'})。
31. pd.pivot_table()
用途:数据透视表。Excel 透视表的 Python 复刻版,支持多级索引汇总。
32. pd.crosstab()
用途:交叉表。计算分组频率(频数统计)时的快捷方式。
33. df.nlargest() / df.nsmallest()
用途:快速找出最大/最小的 Top N 记录,比先 sort 再 head 效率更高。
七、 数据合并
处理多表关联时的必备技能。
34. pd.merge()
用途:基于键(Key)的连接,类似于 SQL 的 JOIN。
参数:how='left'/'inner'/'outer', on='key'。
35. pd.concat()
用途:物理拼接。通常用于将结构相同的多个 DataFrame 上下(轴0)堆叠。
36. df.join()
用途:基于索引(Index)的快速合并。
八、 时间序列:Pandas 的看家本领
Pandas 最初就是为金融数据分析设计的,因此时间处理能力极强。
37. pd.to_datetime()
用途:智能转换为时间类型。解析失败时可使用 errors='coerce' 设为 NaT。
38. df.resample()
用途:重采样。
场景:将“分钟级”数据降采样为“日级”数据(如 rule='1D'),并配合 .mean() 或 .sum() 使用。
39. df.shift()
用途:数据位移。
场景:计算同比、环比(即当前行减去上一行的数据)。
40. df.rolling()
用途:移动窗口。
场景:计算 5 日移动平均线(MA5):df['price'].rolling(window=5).mean()。
九、结语
掌握这 40 个方法,意味着你已经覆盖了 90% 的日常数据处理需求。Pandas 的强大不仅在于函数数量,更在于其向量化运算的设计哲学。
在实际开发中,建议时刻关注内存使用与运行效率,尽量避免在 DataFrame 中使用 Python 原生的 for 循环,转而使用上述内置的高效方法。