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

Python优化CSV列比对及向指定行追加内容的方案探讨

优化CSV匹配拼接脚本的方案

你的需求是将CSV1中匹配ID的值拼接后追加到CSV2对应行,用pandas可以完美解决这个问题,同时大幅提升性能、精简代码,还能避免手动处理CSV的各种坑(比如单元格含逗号的情况)。

原代码的问题点

  • 重复读取CSV1,额外消耗IO资源
  • 用列表存储数据,in判断、count、index查找的时间复杂度高,数据量大时会明显变慢
  • 手动拆分CSV行,无法处理单元格包含逗号(被引号包裹)的合法场景

基于pandas的优化实现

import pandas as pd

# 读取CSV文件,header=None表示文件无表头,按列索引操作
df1 = pd.read_csv('csv1.csv', encoding='utf8', header=None)
df2 = pd.read_csv('csv2.csv', encoding='utf8', header=None)

# 对df1按匹配列(第0列)分组,将待追加的列(第2列)用" + "拼接
merged_df1 = df1.groupby(0, as_index=False)[2].agg(' + '.join)

# 将df2和处理后的df1合并,按df2的匹配列(第1列)与df1的第0列关联
# how='left'保留df2的所有行,匹配不到的用NaN填充
result = pd.merge(df2, merged_df1, left_on=1, right_on=0, how='left')

# 将未匹配的行填充为"not found"
result[2] = result[2].fillna('not found')

# 合并原df2的行和拼接结果,生成最终数据
final_result = pd.concat([df2, result[2]], axis=1)

# 保存结果到out.csv,不保留pandas自动生成的索引
final_result.to_csv('out.csv', encoding='utf8', index=False, header=False)

代码说明

  1. 分组拼接:用groupby+agg(' + '.join)直接完成同ID下值的拼接,比手动循环高效得多
  2. 合并操作:pd.merge的left连接保证CSV2的所有行都被保留,完全符合你的需求
  3. 鲁棒性:pandas原生处理CSV的各种格式问题,不用再担心手动拆分出错
  4. 性能:pandas基于numpy实现,处理大数据量时比纯Python循环快几个数量级

如果你的CSV有表头,只需要去掉header=None,并把代码中的列索引(0、1、2)换成对应的列名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:59:55