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

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

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

我的代码很简单:

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

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

文件来自晨星公司


当前回答

我有一个类似的情况

train = pd.read_csv('input.csv' , encoding='latin1',engine='python') 

工作

其他回答

解析器被文件头弄糊涂了。它读取第一行并从该行推断列数。但是前两行并不能代表文件中的实际数据。

用data = pd试试。read_csv(路径,skiprows = 2)

你也可以试试;

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参考。

对于那些在linux操作系统上使用Python 3有类似问题的人。

pandas.errors.ParserError: Error tokenizing data. C error: Calling
read(nbytes) on source failed. Try engine='python'.

试一试:

df.read_csv('file.csv', encoding='utf8', engine='python')

我相信解决方案,

,engine='python'
, error_bad_lines = False

如果它是虚拟列并且你想要删除它,这将是很好的。 在我的例子中,第二行确实有更多的列,我希望这些列被积分,并且有列数= MAX(列)。

请参考下面我无法阅读的解决方案:

try:
    df_data = pd.read_csv(PATH, header = bl_header, sep = str_sep)
except pd.errors.ParserError as err:
    str_find = 'saw '
    int_position = int(str(err).find(str_find)) + len(str_find)
    str_nbCol = str(err)[int_position:]
    l_col = range(int(str_nbCol))
    df_data = pd.read_csv(PATH, header = bl_header, sep = str_sep, names = l_col)

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

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

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

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