Pandas读取自动生成CSV文件时缺失列的问题求助
解决Pandas读取自动生成CSV时DATE列缺失的问题
自动生成的CSV常因编码、隐藏字符、非标准格式等问题导致Pandas解析错位,以下是针对性解决方案:
1. 处理UTF-8 BOM头问题
很多自动生成的CSV会带UTF-8 BOM头,Pandas默认读取会把BOM当作DATE列名的一部分,引发列错位。直接指定编码为utf-8-sig即可解决:
csvFile = pd.read_csv(original_file, encoding='utf-8-sig')
2. 修复换行符/分隔符异常
自动生成文件可能用了非标准换行符(如\r)或分隔符(如制表符\t),可通过以下方式处理:
- 指定换行符:
csvFile = pd.read_csv(original_file, lineterminator='\n')
- 自动检测分隔符:
csvFile = pd.read_csv(original_file, sep=None, engine='python')
3. 清理表头隐藏控制字符
部分自动生成文件的表头行含不可见控制字符,导致Pandas识别表头错误。先读取文件清理表头,再解析:
import re from io import StringIO with open(original_file, 'r', encoding='utf-8-sig') as f: lines = f.readlines() if lines: # 移除表头的非打印控制字符 lines[0] = re.sub(r'[\x00-\x1F\x7F]', '', lines[0]) csvFile = pd.read_csv(StringIO(''.join(lines)))
4. 强制指定列结构
如果以上方法无效,直接指定列名强制Pandas按预期结构读取:
csvFile = pd.read_csv(original_file, names=['DATE', 'TIME', 'FILE NAME'], header=0) # 若表头已损坏,跳过表头重新指定列名: # csvFile = pd.read_csv(original_file, skiprows=1, names=['DATE', 'TIME', 'FILE NAME'])
修改后的完整代码
from pathlib import Path import pandas as pd import re from io import StringIO original_file = "目标CSV文件路径" # 预处理文件,清理BOM和表头控制字符 with open(original_file, 'r', encoding='utf-8-sig') as f: lines = f.readlines() if lines: lines[0] = re.sub(r'[\x00-\x1F\x7F]', '', lines[0]) # 读取处理后的内容 csvFile = pd.read_csv(StringIO(''.join(lines))) # 保存为XLSX newFileName = f"{Path(original_file).stem}.xlsx" with pd.ExcelWriter(newFileName) as resultExcelFile: csvFile.to_excel(resultExcelFile, index=False)
内容的提问来源于stack exchange,提问作者mrawesome0238
相关产品推荐
相关产品推荐

