You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按数值范围拆分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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:48:06