如何使用Python Pandas清洗UTF-16编码文本文件并转换为DataFrame
解决方案
核心问题原因
- 读取文件时未指定UTF-16编码,导致内容解析错乱
- csv.reader默认使用逗号作为分隔符,你的文件以分号作为字段分隔符,导致整行内容被识别为单个元素,空row触发索引越界报错
- 你代码中的
"替换逻辑属于误操作,该字符是网页展示的HTML转义符,本地实际存储的文件中只有普通双引号,不需要额外替换
最优方案:直接用pandas内置方法读取
无需手动处理行拆分、字符替换,通过read_csv参数直接适配你的文件规则:
import pandas as pd import csv df = pd.read_csv( "test.csv", encoding="utf-16", # 适配你的文件编码 sep=";", # 指定分号为字段分隔符 quotechar='"', # 识别双引号包裹的字段 quoting=csv.QUOTE_ALL, usecols=["Day", "name", "age", "money"] # 直接指定保留列 ) print(df)
运行后直接输出你期望的格式,空money列会自动转为NaN值。
原有代码修复方案
如果你要保留原有手动读取的逻辑,修改后代码如下:
import pandas as pd import csv cols = ['Day', 'name', 'age', 'money'] data = [] # 增加encoding参数指定UTF-16编码 with open('test.csv', 'r', encoding='utf-16') as f: # 给csv.reader指定分号为分隔符 reader = csv.reader(f, delimiter=';', quotechar='"') # 跳过表头 next(reader) for row in reader: # csv.reader已经自动完成拆分,截取前4个有效字段即可 edited = row[:4] data.append(edited) df2 = pd.DataFrame(data, columns=cols) print(df2)
内容的提问来源于stack exchange,提问作者sdave
相关产品推荐
相关产品推荐

