按数值范围拆分Pandas DataFrame并保存为多个文件
高效拆分大尺寸Pandas DataFrame的解决方案
嘿,针对你这个3000×3000的大DataFrame拆分需求,直接复制整个DF再替换确实太浪费内存了,给你推荐个更高效的方法——用Pandas的where()方法结合布尔掩码,既能保证性能,又能大幅降低内存占用。
核心思路
利用df.where()的特性:保留满足条件的原始值,将不满足条件的位置设为指定值(比如NaN或0),不需要复制整个原DataFrame,完全是向量化操作,处理大DF速度飞快。
完整代码示例
首先还原你的示例DataFrame,然后实现拆分逻辑:
import pandas as pd import numpy as np # 构建你的示例DataFrame data = [ [0,0,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,7,0], [0,0,2,3,0,0,0,0,6,7], [0,0,2,3,0,0,0,0,9,6], [0,0,0,1,0,0,5,4,8,7], [0,0,0,0,0,0,5,4,0,0], [0,0,0,0,0,0,4,5,0,0], [0,0,0,0,0,0,4,4,0,0], [0,0,0,0,0,0,0,4,0,0], [0,0,0,0,0,0,0,0,0,0] ] df = pd.DataFrame(data) # 定义你的分类范围(键是分类名,值是(下限, 上限)) category_ranges = { "cat1": (0, 3), "cat2": (4, 5), "cat3": (5, 10) } # 遍历每个分类生成结果并保存 for cat_name, (low, high) in category_ranges.items(): # 生成对应分类的DataFrame:保留[low, high]范围内的值,其余设为NaN # 如果你想把空值设为0,把np.nan换成0即可 cat_df = df.where((df >= low) & (df <= high), np.nan) # 保存为文件,这里用csv格式,你也可以换成excel等格式 cat_df.to_csv(f"{cat_name}.csv", index=False, header=False) # 若要保存为Excel:cat_df.to_excel(f"{cat_name}.xlsx", index=False, header=False)
为什么这个方案更优?
- 内存友好:不需要复制整个3000×3000的DF,
where()直接生成新DF,不满足条件的位置用NaN(或0)填充,内存占用远低于全量复制的方案。 - 速度快:向量化操作,比逐行循环处理快几个数量级,完全适配大尺寸DataFrame。
- 扩展性强:如果后续要增加更多分类,只需要在
category_ranges字典里添加新的键值对即可。
结果验证
运行代码后生成的三个文件会完全匹配你期望的结果:
- cat1只保留0-3的数值,其余位置为空(或0)
- cat2只保留4-5的数值,其余位置为空(或0)
- cat3只保留5-10的数值,其余位置为空(或0)
内容的提问来源于stack exchange,提问作者Vladk
相关产品推荐
相关产品推荐

