Windows下Python加载大CSV至Pandas无堆栈跟踪崩溃排查
解决Pandas加载大CSV时Python无预警崩溃的问题
我之前碰到过几乎一模一样的糟心事!当时试图把几个GB级的CSV文件加载到Pandas里,刚运行没多久就弹出“Python已停止工作”的对话框,终端里却连半条错误信息都没有——一开始我也默认是内存不够,折腾了好一阵才找到真正的根源。
先排查内存问题(虽然后来证明不是,但值得走一遍流程)
- 用
memory_profiler监控内存变化,确认是不是真的内存溢出:
先安装模块:pip install memory-profiler,然后给加载函数加装饰器:
运行后会输出每一行代码的内存占用,能直观看到加载过程中内存的变化趋势。from memory_profiler import profile import pandas as pd @profile def load_big_csv(): df = pd.read_csv("your_large_file.csv") return df if __name__ == "__main__": load_big_csv() - 试试分批加载CSV,用
chunksize参数拆分数据:
如果分批加载还是崩溃,基本可以排除是内存总量不足的问题。chunk_generator = pd.read_csv("your_large_file.csv", chunksize=10000) for idx, chunk in enumerate(chunk_generator): print(f"处理第{idx+1}块,数据量:{chunk.shape}") # 这里可以加简单的处理逻辑,看单块会不会崩溃
强制生成崩溃时的堆栈跟踪
因为系统直接崩溃没日志,得让Python在崩溃时输出堆栈信息:
- Windows环境下,先在命令行执行
set PYTHONFAULTHANDLER=1,再运行你的脚本; - 或者在脚本里主动启用
faulthandler模块:
这样下次崩溃时,终端会输出详细的堆栈信息,能帮你定位到具体是Pandas哪段代码出了问题。import faulthandler faulthandler.enable() # 启用崩溃时的堆栈打印 import pandas as pd df = pd.read_csv("your_large_file.csv")
我的最终解决办法
折腾一圈后发现,根本不是内存的问题,就是Pandas旧版本的bug!我当时用的是20.3版本,执行pip install --upgrade pandas升级到最新稳定版之后,加载大CSV再也没出现过崩溃的情况。
内容的提问来源于stack exchange,提问作者Jamie Antonelli
相关产品推荐
相关产品推荐

