如何使用pandas识别未知分隔符并正确读取CSV文件?
分隔符排查步骤
- 不要用Excel打开文件排查,Excel会自动转码掩盖原始分隔符,直接用纯文本编辑器(记事本、VS Code、Notepad++均可)打开源文件,直接观察前10行内容里字段间的间隔符号,注意排查全角符号、不可见控制符、多字符组合间隔。
- 肉眼无法识别时,直接读取文件原始字节定位分隔符,执行以下代码打印前500字节的原始内容,所有不可见字符都会以转义形式显示:
with open("你的国民收入数据集文件路径.csv", "rb") as f: print(f.read(500))
- 不想手动排查可以直接启用pandas的自动分隔符检测,注意必须搭配Python引擎使用,C引擎不支持该功能:
df = pd.read_csv("你的文件路径.csv", sep=None, engine='python')
多分隔符场景读取方案
- 逐一尝试单分隔符失败,基本可以判定文件使用混合分隔符(比如逗号+多空格、制表符+分号组合、字段间存在不定数量空格),此时直接传入正则表达式作为sep参数即可匹配所有分隔场景:
import pandas as pd df = pd.read_csv( "你的文件路径.csv", sep=r'[,\t;| ]+', # 匹配逗号、制表符、分号、竖线、空格的1次及以上组合作为分隔符 engine='python', skipinitialspace=True # 自动忽略分隔符前后的多余空白字符 )
- 如果排查发现文件没有统一分隔符,是靠每列固定字符宽度对齐的格式,直接改用固定宽度读取接口即可,不需要强行用read_csv:
df = pd.read_fwf("你的文件路径.csv")
- 注意:之前执行的
df=pd.read_csv("file name", sep='delimiter')是错误写法,delimiter是sep参数的别名,不是具体分隔符值,传入该字符串会让pandas查找内容中出现的"delimiter"文本作为分隔标记,必然读取失败。
内容的提问来源于stack exchange,提问作者captmorgan
相关产品推荐
相关产品推荐

