You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas read_csv读取含&的CSV文件出现列偏移问题求助

解决Pandas读取含&的CSV时列偏移的问题

嘿,我之前也踩过类似的CSV解析坑!你遇到的列偏移问题,大概率是因为CSV单元格里的**&**(HTML转义后的&符号)和Pandas默认的CSV解析规则冲突了——要么是特殊字符没被正确识别为单元格内内容,要么是CSV本身格式不够规范。给你几个实用的解决思路:

1. 明确指定引号与转义规则

很多时候,包含特殊字符的CSV单元格会用引号包裹,但Pandas默认的解析逻辑可能没正确识别。你可以手动指定quotechar和escapechar参数,告诉Pandas哪些字符用来界定单元格内容:

import pandas as pd

# 假设单元格用双引号包裹,转义符为反斜杠
df = pd.read_csv('your_file.csv', quotechar='"', escapechar='\\', encoding='utf-8')

如果你的CSV里所有带特殊内容的单元格都被引号包裹,还可以结合csv模块的常量来强化解析规则:

import csv
import pandas as pd

# 强制解析所有被引号包裹的内容
df = pd.read_csv('your_file.csv', sep=',', quoting=csv.QUOTE_ALL, quotechar='"', encoding='utf-8')

2. 预处理CSV,替换HTML转义字符

既然问题出在**&**这个HTML转义符上,你可以先把文件里的&替换成普通的&,再交给Pandas读取:

import pandas as pd
from io import StringIO

# 读取文件内容并替换转义字符
with open('your_file.csv', 'r', encoding='utf-8') as f:
    processed_content = f.read().replace('&', '&')

# 用StringIO模拟文件对象,直接读取处理后的内容
df = pd.read_csv(StringIO(processed_content), sep=',')

3. 切换到Python引擎解析

Pandas默认用C语言实现的解析引擎(速度快但容错性弱),遇到复杂CSV时,切换到纯Python引擎往往能解决问题:

import pandas as pd

# 使用Python引擎,同时忽略分隔符后的空格(避免误判)
df = pd.read_csv('your_file.csv', engine='python', skipinitialspace=True, encoding='utf-8')

4. 检查CSV本身的格式规范

如果上面的方法都没用,建议用文本编辑器打开CSV文件,定位到出现列偏移的行,看看**&**所在的单元格是不是没被引号包裹。比如规范的格式应该是:

1,"Product A & Product B",2024-05-20
如果单元格没有引号,Pandas会把&当成潜在的分隔符信号,导致列偏移。这种情况要么手动修正CSV格式,要么用正则表达式预处理给含特殊字符的单元格加上引号。

举个适配HTML字段的完整示例:
假设你的CSV内容如下:

ID,Product,Description
1,"Laptop","15-inch screen & 16GB RAM"
2,"Phone","5G support & fast charging"

用以下代码就能正确解析:

import csv
import pandas as pd

df = pd.read_csv('products.csv', sep=',', quoting=csv.QUOTE_ALL, quotechar='"', encoding='utf-8')
print(df)

内容的提问来源于stack exchange,提问作者mustacheMcGee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:30:52