首页 > 解决方案 > pandas.errors.ParserError: ',' 预计在 '"' 之后

问题描述

我正在尝试从 Kaggle 中读取此数据集:Amazon sales rank data for print and kindle books

该文件amazon_com_extras.csv 有一个名为“Title”的列,有时包含一个逗号“,”因此此 .csv 中的所有字段都用引号引起来:

"ASIN","GROUP","FORMAT","TITLE","AUTHOR","PUBLISHER"
"022640014X","book","hardcover","The Diversity Bargain: And Other Dilemmas of Race, Admissions, and Meritocracy at Elite Universities","Natasha K. Warikoo","University Of Chicago Press"

我已经阅读了与此问题相关的其他问题,但没有一个能解决它。例如,我尝试过:

df = pd.read_csv("amazon_com_extras.csv",engine="python",sep=',')
df = pd.read_csv("amazon_com_extras.csv",engine="python",sep=',',quotechar='"')

但似乎没有任何效果。我正在使用 Python 3.7.2 和 pandas 0.24.1。

标签: python-3.xpandas

解决方案


这发生在您身上,因为文档中的某些字段在引用的文本中包含未转义的引号。

我不知道有一种方法可以指示 csv 解析器在不进行预处理的情况下处理它。

如果您不关心这些列,则可以使用

pd.read_csv("amazon_com_extras.csv", engine="python", sep=',', quotechar='"', error_bad_lines=False)

这将禁止引发异常,但会删除受影响的行(您将在控制台中看到)。

这种行的一个例子:

"1405246510","book","hardcover",""Hannah Montana" Annual 2010","Unknown","Egmont Books Ltd"

注意引号。

相反,更标准的 csv 方言会呈现:

1405246510,"book","hardcover","""Hannah Montana"" Annual 2010","Unknown","Egmont Books Ltd"

例如,您可以使用 Libreoffice 加载文件并再次将其重新保存为 CSV 以获得有效的 CSV 方言或使用其他预处理技术。


推荐阅读