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

如何提升Python Pandas补全CSV缺失数据的程序运行速度?

用Pandas高效补全子集CSV的缺失数据

你的两层循环效率极低的原因是iterrows()是逐行迭代逻辑,且两层循环的时间复杂度为O(n*m),面对10万+行的主文件会产生巨量运算。下面用Pandas的向量化操作替代,能大幅提升处理速度:

核心思路

以子集的第3、27列为匹配键关联主文件,提取需要补全的第4、5列数据,用主文件的值填充子集的缺失项,最终保留子集原有结构。

步骤代码

建议用实际列名替代索引(更清晰且避免列顺序变动出错),以下示例假设:

  • 匹配键:key1(原第3列)、key2(原第27列)
  • 需要补全的列:col4(原第4列)、col5(原第5列)
import pandas as pd

# 读取CSV文件(替换为你的文件路径)
master = pd.read_csv('master.csv')
subset = pd.read_csv('subset.csv')

# 1. 从主文件中仅提取匹配键和需要补全的列,减少不必要的数据处理
master_fill = master[['key1', 'key2', 'col4', 'col5']]

# 2. 对主文件的匹配键去重(确保每个(key1,key2)组合仅保留一行,和原循环"找到第一个匹配项即停止"逻辑一致)
master_fill = master_fill.drop_duplicates(subset=['key1', 'key2'], keep='first')

# 3. 左连接子集和主文件的补全数据,保留子集所有行
merged = subset.merge(
    master_fill,
    on=['key1', 'key2'],
    how='left',
    suffixes=('', '_master')  # 区分子集和主文件的同名列
)

# 4. 用主文件的数据补全子集的缺失值
merged['col4'] = merged['col4'].combine_first(merged['col4_master'])
merged['col5'] = merged['col5'].combine_first(merged['col5_master'])

# 5. 移除合并产生的冗余列,得到更新后的子集
updated_subset = merged.drop(['col4_master', 'col5_master'], axis=1)

# 输出或保存结果
print(updated_subset)
# updated_subset.to_csv('updated_subset.csv', index=False)

关键说明

  • 向量化优势:Pandas的merge和combine_first都是底层优化的向量化运算,时间复杂度接近O(n),远快于逐行循环。
  • 去重必要性:如果主文件存在重复的匹配键组合,提前去重可避免合并后出现多余行,保证补全逻辑和原循环一致。
  • 列名替代索引:用实际列名代替values[3]这类索引,代码可读性更强,也能避免列顺序变动导致的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:47:28