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

Python如何处理行首尾带文本限定符的CSV文件并加载为DataFrame

问题根因

你使用的CSV文件格式存在不规范问题:所有数据行的完整字段内容被外层双引号整体包裹,导致pandas默认将整行内容识别为第一个字段的值,后续所有字段全部为空值,不符合预期。

修复方案

通过预解析CSV行、处理多余转义字符后再导入pandas,修复代码如下:

import os
import glob
import pandas as pd
from io import StringIO

path = r'\\Srvflssp03\gto\Planejamento_Operacional\Forecast\2021\11 Novembro\Relatórios MIS'
file_list = glob.glob(os.path.join(path, '**/*.csv'), recursive=True)

df_list = []
for file_path in file_list:
    with open(file_path, 'r', encoding='utf-8') as f:
        # 读取表头行
        header_line = f.readline().strip()
        processed = [header_line]
        # 逐行处理数据
        for line in f:
            line = line.strip()
            if not line:
                continue
            # 移除数据行外层包裹的双引号
            if line.startswith('"') and line.endswith('"'):
                line = line[1:-1]
            # 还原字段内转义的双引号
            line = line.replace('""', '"')
            # 移除行尾多余的空字段逗号
            line = line.rstrip(',')
            processed.append(line)
    # 读取处理后的数据
    df = pd.read_csv(
        StringIO('\n'.join(processed)),
        quotechar='"',
        sep=',',
        thousands=','
    )
    df_list.append(df)

# 合并所有文件数据
combined_df = pd.concat(df_list, ignore_index=True)
combined_df.head(11)
关键改动说明
  • 逐行移除了数据行外层多余的双引号避免整行被识别为单个字段
  • 还原字段内的转义双引号""为标准双引号",保证字段识别准确
  • 新增thousands=','参数,自动识别3,911.69这类带千分位逗号的数值为数字类型,不会被逗号拆分
  • 合并数据时添加ignore_index=True避免不同文件的索引重复
  • 移除行尾多余的空值逗号,避免生成多余空列

如果文件读取出现编码错误,可将encoding='utf-8'替换为encoding='latin-1'或encoding='cp1252'适配不同编码的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:24:05