当数据分析因 Pandas 内存不足而停止时
TuBrief 편집팀
2026년 7월 13일
0
Computing/Software원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
커뮤니티의 다른 글
댓글 (0)
Log in to leave a comment
아직 작성된 글이 없습니다
원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
Log in to leave a comment
아직 작성된 글이 없습니다
Pandas 会将数据一次性加载到 RAM 中。这就是为什么在拥有 16GB 内存的笔记本电脑上尝试打开 20GB 的 CSV 文件时,Python 会崩溃的原因。只要数据稍微变大,笔记本电脑就会卡死,Jupyter Notebook 内核也会挂掉。我们不可能每次都去进行数据抽样或者升级电脑配置。
请改用 DuckDB。它只会根据需要一点一点地获取数据。它不会将全部数据加载到 RAM 中,而是使用 SQL 语法仅扫描需要的部分。这就是它作为 Pandas 的替代品在数据工程师中备受关注的原因。
改变数据分析环境比想象中要简单。保留现有的 Pandas DataFrame,只需更换引擎即可。
duckdb.sql() 函数编写所需的条件和聚合。此时尚未进行实际计算。.df() 时才会进行真正的计算。这种方式带来的效率提升不仅仅是代码层面的。在 Pandas 中执行 groupby 时会导致内存溢出的操作,在 DuckDB 中可以利用磁盘稳定运行。
在处理大数据时,经常会发生耗尽 RAM 导致程序崩溃的情况。为了防止这种情况,必须在工作环境中设置护栏。
在脚本顶部添加以下代码:
`python
import duckdb
con = duckdb.connect()
con.execute("SET memory_limit = '4GB'")
con.execute("SET temp_directory = './tmp'")
`
memory_limit 是 DuckDB 使用 RAM 的上限。将其设置为 4GB 后,即使在我只有 16GB 内存的笔记本电脑上,系统也不会整体卡死。如果 RAM 不足,DuckDB 会自动将数据写入磁盘临时文件。根据 2023 年的基准测试,在处理 140GB 的 Parquet 文件时,DuckDB 仅用 1.3GB 的 RAM 就完成了工作。如果是 Pandas,它会占用几十 GB 的内存,最终导致崩溃。
数据分析中最令人沮丧的时刻莫过于因为格式错误导致解析停止。导入 CSV 文件时,如果类型不匹配,分析甚至无法开始。
在使用 read_csv 函数时,请开启以下选项:
`python
con.execute("""
SELECT * FROM read_csv('data.csv',
columns={'id': 'INTEGER', 'value': 'DOUBLE'},
store_rejects=true,
strict_mode=false)
""")
`
这样,不符合格式的数据就不会导致整个进程崩溃。错误的行会被隔离到单独的表中。稍后只需单独查询 reject_errors 表,即可确认数据为何损坏。
分析的目的不是修复工具,而是从数据中提取洞察。停止因为内存问题而反复运行代码,先更换引擎以确保处理效率吧。