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

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

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

我的代码很简单:

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

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

文件来自晨星公司


当前回答

在参数中使用分隔符

pd.read_csv(filename, delimiter=",", encoding='utf-8')

它会读。

其他回答

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

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

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

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

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

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

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

希望这能有所帮助。

你可以这样做,以避免问题-

train = pd.read_csv('/home/Project/output.csv' , header=None)

just add - header=None

希望这能有所帮助!!

在处理类似的解析错误时,我发现另一种方法很有用,它使用CSV模块将数据重新路由到pandas df。例如:

import csv
import pandas as pd
path = 'C:/FileLocation/'
file = 'filename.csv'
f = open(path+file,'rt')
reader = csv.reader(f)

#once contents are available, I then put them in a list
csv_list = []
for l in reader:
    csv_list.append(l)
f.close()
#now pandas has no problem getting into a df
df = pd.DataFrame(csv_list)

我发现CSV模块对于格式不佳的逗号分隔的文件更加健壮,因此已经成功地用这种方法解决了诸如此类的问题。

我使用的数据集有很多引号(")使用无关的格式。我能够通过包含read_csv()的这个参数来修复这个错误:

quoting=3 # 3 correlates to csv.QUOTE_NONE for pandas