Python导入5M行15列文本数据集显示异常,求排查解决
解决方案:处理文本导入时的乱码与列识别问题
这个问题我之前也碰到过,核心是编码识别错误加上大文件的读取适配问题,咱们一步步拆解解决:
1. 乱码原因分析
你看到的ÿþ是UTF-16 LE(小端序)的字节顺序标记(BOM)——因为你用了ISO-8859-1编码去解码UTF-16格式的文件,导致BOM被当成了普通字符显示,进而引发后续列的识别混乱(出现Unnamed列和NaN)。
2. 针对性解决方案
(1)修正编码参数
直接将编码改为utf-16,pandas会自动识别并跳过UTF-16的BOM,同时保持制表符分隔符不变:
import pandas as pd path_in = 'C:/Users/cagdas/Python_SQLite/inputs/' # 用UTF-16编码读取,自动处理BOM df = pd.read_csv(path_in+'df.txt', delimiter="\t", encoding="utf-16")
如果还是有问题,可以尝试指定具体的字节顺序:encoding='utf-16-le'(小端)或encoding='utf-16-be'(大端)。
(2)适配5M行的大文件
5M行的数据集可能会占用较多内存,建议用chunksize参数分批读取,避免内存溢出:
chunk_list = [] # 每次读取10万行,可根据你的内存调整数值 for chunk in pd.read_csv(path_in+'df.txt', delimiter="\t", encoding="utf-16", chunksize=100000): chunk_list.append(chunk) # 合并所有批次数据 df = pd.concat(chunk_list, ignore_index=True)
(3)验证分隔符准确性
如果修改编码后仍有Unnamed列,可能是实际分隔符不是单纯的\t(比如多个制表符/空格混合),可以尝试:
- 使用
sep='\s+'匹配任意空白字符 - 指定
engine='python'(Python引擎对复杂分隔符支持更好)
df = pd.read_csv(path_in+'df.txt', sep='\s+', encoding="utf-16", engine='python')
(4)手动排查文件头部
如果不确定编码或分隔符,可以先读取文件前几字节确认:
with open(path_in+'df.txt', 'rb') as f: # 读取前100字节查看原始字节内容 print(f.read(100))
如果输出开头是b'\xff\xfe',就确认是UTF-16 LE格式;如果是b'\xfe\xff'则是UTF-16 BE格式。
内容的提问来源于stack exchange,提问作者Cagdas Kanar
相关产品推荐
相关产品推荐

