读取制表符分隔CSV至Dataframe时仅表头分隔值未分隔的问题
解决制表符分隔CSV读取后数据未分隔的问题
我来帮你一步步排查和解决这个头疼的问题:
先搞定路径转义的坑
你写的路径'C:\Users\LENOVO\Downloads\9.csv'在Python里有隐患——反斜杠\是转义字符,比如\U会被解析成Unicode转义序列,这可能导致pandas读错文件!
先把路径改成以下两种形式之一:
# 推荐用原始字符串(前面加r) dfs = pd.read_csv(r'C:\Users\LENOVO\Downloads\9.csv', sep='\t', engine='python') # 或者用双反斜杠转义 dfs = pd.read_csv('C:\\Users\\LENOVO\\Downloads\\9.csv', sep='\t', engine='python')
确认文件的真实分隔符
有时候标注是制表符分隔,但实际可能用了多个空格、全角制表符或者其他字符。你可以用两种方式验证:
- 用Notepad++打开文件,开启「显示所有字符」功能,直接看数据行的分隔符到底是什么;
- 用Python的
csv模块先读几行确认:
import csv with open(r'C:\Users\LENOVO\Downloads\9.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f, delimiter='\t') print("表头行:", next(reader)) print("第一行数据:", next(reader))
如果输出的第一行数据是一整串字符串(没被拆分成列表元素),说明分隔符根本不是\t,替换成实际的分隔符就行。
处理引号或编码干扰
如果数据里有被引号包裹的字段(比如字段内容本身包含制表符),得让pandas正确识别引号:
import csv dfs = pd.read_csv(r'C:\Users\LENOVO\Downloads\9.csv', sep='\t', engine='python', quoting=csv.QUOTE_ALL)
要是文件是GBK等非UTF-8编码,记得加上编码参数:
dfs = pd.read_csv(r'C:\Users\LENOVO\Downloads\9.csv', sep='\t', engine='python', encoding='gbk')
最后验证结果
修改后先打印基本信息和前几行,确认数据是否正确分隔:
print(dfs.info()) print(dfs.head())
这时候再访问dfs['Product Id']应该就不会触发KeyError了。
内容的提问来源于stack exchange,提问作者nick
相关产品推荐
相关产品推荐

