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

如何避免pandas read_csv读取单行时重复值被自动编号?

解决pandas逐行读取超大CSV时列名自动加后缀的问题

问题根源

你用skiprows=lambda x: x!=i逐行读取时,若目标行不是原CSV的列名行(第0行),pandas会跳过列名行,把目标行当作DataFrame的列名。而目标行里的重复值会被pandas自动添加.1/.2后缀以避免列名冲突,写入CSV后就会导致其他软件无法正常读取。

替代方案

方案1:用pandas的chunksize=1分块读取

这种方式会保留原CSV的列名,每个chunk对应一行数据,处理时不会出现列名异常,同时适合超大型文件的内存友好处理:

import pandas as pd

# 先写入输出文件的列名
with open('output.csv', 'w', newline='', encoding='utf-8') as f_out:
    # 仅读取列名行
    header_df = pd.read_csv('large_file.csv', nrows=0)
    header_df.to_csv(f_out, index=False)

    # 逐块读取,每块1行
    for chunk in pd.read_csv('large_file.csv', chunksize=1):
        # 修改当前行数据,示例:修改某列值
        chunk.loc[chunk.index[0], 'target_column'] = 'modified_content'
        
        # 插入新行(按需执行)
        new_row = chunk.copy()
        new_row.loc[new_row.index[0], 'target_column'] = 'new_row_content'
        
        # 写入处理后的行和新行(不重复写表头)
        chunk.to_csv(f_out, mode='a', header=False, index=False)
        new_row.to_csv(f_out, mode='a', header=False, index=False)

方案2:用Python原生csv模块逐行处理

如果不需要pandas的数据分析功能,原生csv模块更轻量,完全手动控制行数据,彻底避开列名冲突问题:

import csv

with open('large_file.csv', 'r', encoding='utf-8') as f_in, \
     open('output.csv', 'w', newline='', encoding='utf-8') as f_out:
    # 按字典格式读取行,自动识别列名
    reader = csv.DictReader(f_in)
    writer = csv.DictWriter(f_out, fieldnames=reader.fieldnames)
    # 写入表头
    writer.writeheader()

    for row in reader:
        # 修改当前行数据
        row['target_column'] = 'modified_content'
        writer.writerow(row)

        # 插入新行(按需执行)
        new_row = row.copy()
        new_row['target_column'] = 'new_row_content'
        writer.writerow(new_row)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:12:44