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

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

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

我的代码很简单:

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

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

文件来自晨星公司


当前回答

解决方法简单:在excel中打开csv文件,并保存为csv格式的不同名称文件。再次尝试导入它spyder,你的问题将得到解决!

其他回答

我遇到过这样的错误,一个丢失的引号。我使用映射软件,当导出以逗号分隔的文件时,它会在文本项周围加上引号。使用引号的文本(例如:“=英尺”和“=英寸”)可能会有问题。考虑下面这个例子,5英寸的测井曲线打印很差:

UWI_key,经度,纬度,备注 US42051316890000, 30.4386484, -96.4330734,“可怜的5””

用5英寸作为5英寸的简写,最终会给工作带来麻烦。Excel会简单地去掉额外的引号,但是Pandas没有上面提到的error_bad_lines=False参数就会失效。

一旦你知道了错误的本质,在导入之前,从文本编辑器(例如Sublime text 3或notepad++)中进行查找-替换可能是最简单的。

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

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

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

希望这能有所帮助。

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

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

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

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

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

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

据我所知,在查看了您的文件后,问题是您试图加载的csv文件有多个表。有空行,或者包含表标题的行。试着看看这个Stackoverflow的答案。它展示了如何以编程方式实现这一点。

另一种动态方法是使用csv模块,一次读取每一行,并进行健全检查/正则表达式,以推断该行是否为(title/header/values/blank)。使用这种方法还有一个优点,你可以根据需要在python对象中分割/追加/收集数据。

最简单的方法是在手动选择表格并将其复制到剪贴板后使用pandas函数pd.read_clipboard(),以防您可以在excel或其他工具中打开csv。

无关:

此外,与您的问题无关,但因为没有人提到这一点:我在从UCI加载一些数据集(如seeds_dataset.txt)时遇到了同样的问题。在我的例子中,发生错误是因为一些分隔符的空格比真正的制表符多。例如,请参见下面的第3行

14.38   14.21   0.8951  5.386   3.312   2.462   4.956   1
14.69   14.49   0.8799  5.563   3.259   3.586   5.219   1
14.11   14.1    0.8911  5.42    3.302   2.7     5       1

因此,在分隔符模式中使用\t+而不是\t。

data = pd.read_csv(path, sep='\t+`, header=None)