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
相关产品推荐
相关产品推荐

