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

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

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

我的代码很简单:

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

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

文件来自晨星公司


当前回答

这可能是个问题

数据中的分隔符 第一行,正如@TomAugspurger所指出的

要解决这个问题,请在调用read_csv时尝试指定sep和/或头参数。例如,

df = pandas.read_csv(filepath, sep='delimiter', header=None)

在上面的代码中,sep定义了您的分隔符和header=None,告诉pandas您的源数据没有作为标题/列标题的行。因此,文档说:“如果文件不包含标题行,那么你应该显式地传递header=None”。在这种情况下,pandas会自动为每个字段{0,1,2,…}创建整数索引。

根据文档,分隔符应该不是问题。文档中说“如果sep为None[未指定],将尝试自动确定此值。”然而,我在这方面运气不太好,包括带有明显分隔符的实例。

另一种解决方案可能是尝试自动检测分隔符

# use the first 2 lines of the file to detect separator
temp_lines = csv_file.readline() + '\n' + csv_file.readline()
dialect = csv.Sniffer().sniff(temp_lines, delimiters=';,')

# remember to go back to the start of the file for the next time it's read
csv_file.seek(0) 

df = pd.read_csv(csv_file, sep=dialect.delimiter)

其他回答

你也可以试试;

data = pd.read_csv('file1.csv', on_bad_lines='skip')

请注意,这将导致有问题的行被跳过。

Edit

对于熊猫< 1.3.0尝试

data = pd.read_csv("file1.csv", error_bad_lines=False)

根据熊猫API参考。

我自己也遇到过几次这样的问题。几乎每次,原因都是我试图打开的文件一开始就不是一个正确保存的CSV。这里的“适当”是指每一行都有相同数量的分隔符或列。

通常发生这种情况是因为我在Excel中打开了CSV,然后不恰当地保存了它。尽管文件扩展名仍然是. CSV,但纯CSV格式已经被改变了。

任何以pandas to_csv保存的文件都将被正确格式化,不应该有这个问题。但如果你用另一个程序打开它,它可能会改变结构。

希望这能有所帮助。

我有同样的问题,当read_csv: ParserError:错误标记数据。 我只是把旧的csv文件保存为一个新的csv文件。问题解决了!

您的CSV文件可能有可变的列数,read_csv从前几行推断出列数。在这种情况下有两种解决方法:

1)将CSV文件更改为具有最大列数的虚拟第一行(并指定header=[0])

2)或者使用names = list(range(0,N)),其中N是最大列数。

你可以使用:

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

熊猫1.4.4

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

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