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

如何使用Python高速处理1500万行CSV文件并关联匹配性别字段

问题根因
  • 你使用的双重嵌套for循环时间复杂度为O(n*m),1500万行的答题表乘18.7万行的性别表,会产生超2.8万亿次匹配运算,计算量极大。同时纯Python的循环迭代远慢于Pandas底层C语言实现的矢量化运算,是运行超时、会话崩溃的核心原因。
  • 循环中对df.Gender[i]直接赋值属于链式索引操作,会额外产生大量中间副本,进一步加剧内存占用。
高速实现方案

直接使用Pandas内置的merge左连接操作,底层为矢量化实现,1500万行数据匹配仅需几秒到几十秒即可完成,完全不会触发Colab会话崩溃。

优化后完整代码

import pandas as pd

# 可选优化:读取数据时指定字段类型,大幅降低内存占用,可根据实际数据类型调整
dtype_answer = {"StudentId": "int32", "Question ID": "int32"}
dtype_gender = {"StudentId": "int32", "Gender": "category"}

df = pd.read_csv('/content/drive/MyDrive/file1.csv', dtype=dtype_answer)
dg = pd.read_csv('/content/drive/MyDrive/file2.csv', dtype=dtype_gender)

# 一行代码完成匹配,左连接保留原答题表所有行
df = df.merge(dg, on="StudentId", how="left")

如果需要处理未匹配到性别、Gender为NaN的情况,可在merge后补充填充逻辑:

# 示例:将未匹配的性别填充为"未知"
df['Gender'] = df['Gender'].fillna("未知")
可选进阶优化

如果后续需要处理更大体量的数据,还可以使用更轻量化的高性能数据处理库:

  • 使用polars替代Pandas,内存占用更低,运算速度比Pandas快2~5倍
  • 使用dask实现分块处理,无需将全量数据一次性加载到内存

内容的提问来源于stack exchange,提问作者Rahaf Almgheed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:15:03