Pandas如何按id分组高效将DataFrame存储为对应CSV文件
按id列拆分DataFrame导出独立CSV的高效实现
不要用逐id做布尔筛选的纯Python层for循环,用pandas内置的groupby做分组导出是效率最高的方案,分组逻辑走底层C实现,比手动循环快数倍到数十倍,数据量越大优势越明显。
实现代码
首先导入pandas构造匹配示例结构的测试数据:
import pandas as pd df = pd.DataFrame({ 'id': [1, 1, 2, 3], 'B': [2, 3, 4, 12], 'C': [3, 4, 2, 32] })
核心分组导出逻辑:
# 按id列一次性完成所有分组切分 for group_val, sub_df in df.groupby(by='id', observed=True): # 按分组值命名文件,导出去除默认生成的行索引 sub_df.to_csv(f"{group_val}.csv", index=False)
运行后会直接在当前工作目录生成1.csv、2.csv、3.csv三个文件,每个文件内只存储对应id的所有行数据。
效率优化说明
- 常规低效for循环的写法一般是先取
id列的所有唯一值,再逐次用df[df['id'] == 目标id]做布尔筛选,每次筛选都会触发一次全表扫描,数据量越大重复计算开销越高 groupby的分组切分是pandas底层优化过的逻辑,仅需一次遍历就能完成所有子表拆分,没有重复扫描的额外开销- 如果你的数据量在百万行级别,可以提前安装pyarrow库,在导出时追加
engine='pyarrow'参数,CSV写入速度还能再提升30%以上:sub_df.to_csv(f"{group_val}.csv", index=False, engine='pyarrow')
内容的提问来源于stack exchange,提问作者python_interest
相关产品推荐
相关产品推荐

