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

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

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

我的代码很简单:

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

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

文件来自晨星公司


当前回答

试题:熊猫。read_csv(path, sep = ',',header=None)

其他回答

对于这个问题,我遇到了多种解决方案。很多人也给出了最好的解释。但对于初学者来说,我认为以下两种方法就足够了:

import pandas as pd

#Method 1

data = pd.read_csv('file1.csv', error_bad_lines=False)
#Note that this will cause the offending lines to be skipped.

#Method 2 using sep

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

这可能是个问题

数据中的分隔符 第一行,正如@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)

你可以使用:

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

熊猫1.4.4

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

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

以下是对我有用的(我张贴了这个答案,因为我在谷歌协作笔记本中特别遇到了这个问题):

df = pd.read_csv("/path/foo.csv", delimiter=';', skiprows=0, low_memory=False)

虽然这个问题并非如此,但压缩数据也可能出现此错误。显式地设置kwarg压缩值解决了我的问题。

result = pandas.read_csv(data_source, compression='gzip')