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

使用Pandas遍历多CSV文件行并修改数据的合规实现问题

解决Pandas处理CSV时的列转换及行重复问题

问题场景

处理大量CSV文件时,需要根据指定条件转换Code列的数据。最初用iterrows()循环修改原DataFrame的行,但根据Pandas文档,这种方式不推荐,可能在处理大量文件时出现异常。尝试用新列表存储修改后的行副本,却出现行重复的问题。

最优解决方案:矢量化操作(推荐)

Pandas的核心优势是矢量化操作,比循环高效得多,完全避免iterrows()的潜在问题,处理50+CSV文件时速度更快。

方法1:使用replace函数

直接定义替换映射,一行代码完成转换:

import pandas as pd

# 定义Code列的替换规则
code_mapping = {
    '14/9': '18',
    '14+9': '18',
    '149': '18',
    '3+4+1': '17'
}

# 对Code列执行替换
transformed_data['Code'] = transformed_data['Code'].replace(code_mapping)

方法2:使用loc条件赋值

如果需要更复杂的条件逻辑,用loc精准定位并修改:

# 匹配多个值,赋值为'18'
transformed_data.loc[transformed_data['Code'].isin(['14/9', '14+9', '149']), 'Code'] = '18'
# 匹配单个值,赋值为'17'
transformed_data.loc[transformed_data['Code'] == '3+4+1', 'Code'] = '17'

循环方式的正确写法(不推荐,仅作参考)

如果一定要用循环,需注意仅初始化一次新列表,且每个行只处理并添加一次,避免重复:

new_rows = []
for index, row in transformed_data.iterrows():
    # 复制原行,避免修改原DataFrame
    new_row = row.copy()
    # 执行条件转换
    if new_row['Code'] in ['14/9', '14+9', '149']:
        new_row['Code'] = '18'
    elif new_row['Code'] == '3+4+1':
        new_row['Code'] = '17'
    # 每个处理后的行仅添加一次
    new_rows.append(new_row)

# 将列表转为新的DataFrame
new_transformed_data = pd.DataFrame(new_rows)

之前出现行重复,大概率是因为循环内重复执行了append操作,或者没有正确复制行导致原数据被多次添加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:43:23