如何将处理后的DataFrame导出回原导入CSV文件及优化代码
解决方案
一、将处理后的数据存回原始路径
你最初读取文件的filenames列表存储了所有原始文件的完整路径,且顺序和final列表中的处理后DataFrame一一对应,直接配对调用to_csv即可,示例代码如下:
import pandas as pd # 你的原有处理代码 dfs = [pd.read_csv(filename) for filename in filenames] final=[] for i in range(139): a= dfs[i].iloc[604:,] final.append(a) # 新增存储代码 for filename, df in zip(filenames, final): # index=False表示不把pandas的行索引存入csv,不需要可以删掉这个参数 df.to_csv(filename, index=False, encoding='utf-8-sig')
注:如果你的原始CSV有特殊编码要求,可以自行调整encoding参数的取值,比如中文gbk编码的文件可以填encoding='gbk'
二、代码效率优化
你的原有代码需要先把139个CSV全部读入内存存为dfs列表,处理后再存为final列表,内存开销大,且硬编码了139的文件数量,灵活性差,优化方案如下:
核心优化点:
- 读文件时直接跳过前604行:利用
pd.read_csv的skiprows参数,读文件阶段就过滤掉不需要的行,不需要读取全量文件后再切片,大幅降低IO和内存开销 - 边读边处理边存储:不需要在内存中留存所有原始和处理后的DataFrame,处理完单个文件就直接存回,内存占用降到最低
- 取消硬编码文件数:直接遍历
filenames列表,适配任意数量的输入文件,不需要手动修改数字
优化后完整代码:
import pandas as pd for filename in filenames: # skiprows=604 等价于原代码的 iloc[604:,] 效果,直接跳过前604行 df = pd.read_csv(filename, skiprows=604) # 处理完直接存回原路径 df.to_csv(filename, index=False, encoding='utf-8-sig')
注:如果你需要保留第604行作为表头,不需要调整参数;如果前604行包含表头,你需要跳过前N行后把第一行设为表头,可以调整skiprows和header参数适配你的数据格式
内容的提问来源于stack exchange,提问作者Ali Inayat
相关产品推荐
相关产品推荐

