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

Pandas DataFrame导出为规范CSV时输出格式异常问题求助

Pandas循环导出CSV结果异常问题解决

问题描述

在循环迭代过程中每次将pandas DataFrame导出为CSV文件时,导出结果不符合预期,已尝试切换utf-8、utf-16等编码导出,问题未得到改善。
待导出的DataFrame从pickle文件构建生成,已确认该差异不是问题根源。

原实现代码

for pickle_file in files:
    key = pickle_file.split('/')[5].split('\\')[1] + '_' + pickle_file.split('/')[5].split('\\')[4]
    with lz4.frame.open(pickle_file, "rb") as f:
        while True:
            try:
                diz[key].append(pickle.load(f))
            except EOFError:
                break

for key in diz.keys():
    a = diz[key]
    for j in range(len(a)):
        t = a[j]
        for index,row in t.iterrows():
            if row['MODE'] != 'biflow':
                w = row['W']
                feature = row['FEATURE']
                mean = row['G-MEAN']
                rmse = row['RMSE']
                df.loc[-1] = [w] + [feature] + [rmse] + [mean] + [key]
                df.index = df.index + 1
    df = df.sort_values(by = ['W'])
    df.to_csv(path + key + '.csv', index = False)
    df = df[0:0]

效果对比

  • 实际导出结果:实际输出结果
  • 期望导出结果:期望输出结果

问题根因

  1. 未显式初始化DataFrame的列顺序,按位置给loc[-1]赋值时容易出现值和列错位的问题
  2. 逐行使用loc[-1]追加数据的方式不规范,容易出现索引异常、数据类型推断错误等问题
  3. 导出CSV时未处理字段内的分隔符冲突,如果字段值中包含逗号,会导致单字段被拆分为多列

解决方案

1. 显式初始化DataFrame结构

在循环开始前先定义DataFrame的列,和插入值的顺序完全对应:

import pandas as pd
df = pd.DataFrame(columns=['W', 'FEATURE', 'RMSE', 'G-MEAN', 'key'])

2. 替换逐行追加逻辑

改用列表暂存所有行数据,最后一次性转换为DataFrame,性能更高且稳定性更好:

for key in diz.keys():
    rows = []
    a = diz[key]
    for j in range(len(a)):
        t = a[j]
        for _, row in t.iterrows():
            if row['MODE'] != 'biflow':
                w = row['W']
                feature = row['FEATURE']
                mean = row['G-MEAN']
                rmse = row['RMSE']
                rows.append([w, feature, rmse, mean, key])
    # 一次性生成DataFrame
    df = pd.DataFrame(rows, columns=['W', 'FEATURE', 'RMSE', 'G-MEAN', 'key'])
    df = df.sort_values(by=['W'])
    # 导出时使用utf-8-sig编码适配Excel,开启自动引用避免分隔符冲突
    df.to_csv(f"{path}{key}.csv", index=False, encoding='utf-8-sig', quoting=1)

3. 可选适配方案

如果后续需要用其他工具读取CSV,也可以指定分隔符为制表符,进一步降低分隔符冲突概率:

df.to_csv(f"{path}{key}.csv", index=False, encoding='utf-8-sig', sep='\t')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:48:00