如何用Pandas正确读取含中文与多分隔符的CSV文件?
解决CSV读取时的编码与分隔符问题
看起来你遇到的问题主要出在编码识别错误和分隔符参数设置不当上,我来一步步帮你搞定:
1. 先解决编码错误
报错里的 UnicodeDecodeError: 'big5' codec can't decode byte 0xff in position 0 是关键提示——字节0xff通常是UTF-16编码的BOM(字节顺序标记)开头,或是UTF-8带BOM的情况。你可以优先尝试用utf-16或者utf-8-sig编码来读取文件。
2. 修正分隔符参数
你的CSV是标准的分号分隔、字段用双引号包裹的格式,不需要用复杂的正则表达式sep=r';(?=\S)',直接用sep=';'并指定quotechar='"'就能正确解析带引号的表头。
最终可行代码
import pandas as pd # 优先尝试utf-16编码,若不行替换为utf-8-sig再试 df = pd.read_csv( '0731-0814.csv', sep=';', quotechar='"', encoding='utf-16', engine='python' # 确保兼容特殊编码与分隔逻辑 ) # 查看前两行验证结果 print(df.head(2))
预期输出结果
运行后你会得到符合预期的格式:
2IOUT_TOT_L1 Time 2IOUT_TOT_L1 ValueY 2IOUT_TOT_L2 Time 2IOUT_TOT_L2 ValueY 0 2019/7/31 上午 12:00:00 46145.625 2019/7/31 上午 12:00:00 44032.5 1 2019/7/31 上午 12:00:01 46125.000 2019/7/31 上午 12:00:01 44032.5
补充说明
- 为什么之前的正则分隔符不行?
;(?=\S)要求分号后必须跟非空白字符,但你的CSV里分号是直接作为字段分隔符使用的,正则反而会跳过部分分隔符,导致列数错乱。 - 编码问题是中文CSV的常见坑:Windows下生成的文件常使用UTF-16或带BOM的UTF-8,而非Big5或普通UTF-8,这也是你用Big5编码报错的原因。
内容的提问来源于stack exchange,提问作者Vivian Yu
相关产品推荐
相关产品推荐

