使用pd.read_csv读取含特殊字符CSV文件的技术问题
问题重现
使用pd.read_csv('file_name.csv')读取包含特殊引号的CSV时,因字段内的单/双引号(甚至连续多组)被误判为字符串界定符,导致DataFrame行数据错乱。例如CSV中的问题行:
ID, Name, Year Published, Min Players, Max Players, Play Time, Min Age, Users Rated, Rating Average, Rank, 231972, POWERUP, 2018, 1, 5, 120, 8, 59, 7, 84, 9483 4016, """Scratch One Flat Top!""", 1995, 2, 4, 180, 12, 50, 7, 44, 9484 261898, War For Chicken Island, 2020, 1, 4, 240, 10, 85, 7, 27, 9485
运行df.iloc[9482]后,该行数据完全错位:
ID 4016,"""Scratch One Flat Top!""",1995,2,4,180,...
Name 9484
Year Published NaN
Min Players NaN
Max Players NaN
Play Time NaN
Min Age NaN
Users Rated NaN
Rating Average NaN
Rank NaN
Name: 9482, dtype: object
尝试过quotechar和quoting参数均无效,使用quoting=csv.QUOTE_NONE会出现额外的多余引号。
解决方案
问题根源是CSV中逗号后带有空格,且字段用三重双引号转义内部引号,导致默认配置无法正确识别字段边界。只需启用skipinitialspace=True跳过逗号后的空格,同时指定quotechar='"'识别双引号包裹的字段:
import pandas as pd df = pd.read_csv('file_name.csv', quotechar='"', skipinitialspace=True)
效果验证
读取后,第二行的Name字段会正确保留原始内容"Scratch One Flat Top!",所有列数据对齐正常,不会出现错位或多余引号的问题。
如果同时存在单引号字段,无需额外配置——单引号默认不会被当作CSV界定符,只会作为普通字符保留在字段中。
内容的提问来源于stack exchange,提问作者Jacob Gloe

