我试图使用熊猫操作.csv文件,但我得到这个错误:

pandas.parser.CParserError:标记数据错误。C错误:第3行有2个字段,见12

我试着读过熊猫的文件,但一无所获。

我的代码很简单:

path = 'GOOG Key Ratios.csv'
#print(open(path).read())
data = pd.read_csv(path)

我该如何解决这个问题?我应该使用csv模块还是其他语言?

文件来自晨星公司


当前回答

有时单元格中有一个逗号“,”。因此,熊猫不能读它。 尝试使用“;”分隔符

df = pd.read_csv(r'yourpath', delimiter=";")

其他回答

使用 熊猫。read_csv (CSVFILENAME,头= None, 9 = " ")

当试图从链接中读取CSV数据时

http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data

我将该网站的数据复制到我的csv文件中。它有额外的空格,所以使用sep =', '并且它工作:)

我也遇到过同样的问题。在同一个源文件上使用pd.read_table()似乎可以工作。我找不到原因,但对我的情况来说,这是一个有用的变通办法。也许有更博学的人能解释清楚为什么它能起作用。

编辑: 我发现,当文件中的某些文本与实际数据的格式不一致时,这个错误就会出现。这通常是页眉或页脚信息(大于一行,所以skip_header不起作用),它们不会被与实际数据相同数量的逗号分隔(当使用read_csv时)。使用read_table使用制表符作为分隔符,可以避免用户当前错误,但引入其他错误。

我通常通过将额外的数据读入文件,然后使用read_csv()方法来解决这个问题。

具体的解决方案可能因您的实际文件而异,但这种方法在一些情况下对我来说是有效的

你可以使用:

pd.read_csv("mycsv.csv", delimiter=";")

熊猫1.4.4

它可以是文件的分隔符,将其作为文本文件打开,查找分隔符。然后,您将拥有可以为空且未命名的列,因为行包含太多分隔符。

因此,您可以使用pandas来处理它们并检查值。对我来说,这比在我的情况下跳过台词要好。

这看起来很丑,但你会有你的数据框架

import re
path = 'GOOG Key Ratios.csv'

try:
    data = pd.read_csv(path)
except Exception as e:
    val = re.findall('tokenizing.{1,100}\s*Expected\s*(\d{1,2})\s*',str(e),re.I)
    data = pd.read_csv(path, skiprows=int(val[0])-1)

你可以试试;

data = pd.read_csv('file1.csv', sep='\t')