我试图使用熊猫操作.csv文件,但我得到这个错误:
pandas.parser.CParserError:标记数据错误。C错误:第3行有2个字段,见12
我试着读过熊猫的文件,但一无所获。
我的代码很简单:
path = 'GOOG Key Ratios.csv'
#print(open(path).read())
data = pd.read_csv(path)
我该如何解决这个问题?我应该使用csv模块还是其他语言?
文件来自晨星公司
我试图使用熊猫操作.csv文件,但我得到这个错误:
pandas.parser.CParserError:标记数据错误。C错误:第3行有2个字段,见12
我试着读过熊猫的文件,但一无所获。
我的代码很简单:
path = 'GOOG Key Ratios.csv'
#print(open(path).read())
data = pd.read_csv(path)
我该如何解决这个问题?我应该使用csv模块还是其他语言?
文件来自晨星公司
当前回答
有时单元格中有一个逗号“,”。因此,熊猫不能读它。 尝试使用“;”分隔符
df = pd.read_csv(r'yourpath', delimiter=";")
其他回答
在我的例子中,分隔符不是默认的“,”,而是Tab。
pd.read_csv(file_name.csv, sep='\\t',lineterminator='\\r', engine='python', header='infer')
注意:“\t”并不像某些来源所建议的那样有效。“\\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)
在处理类似的解析错误时,我发现另一种方法很有用,它使用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模块对于格式不佳的逗号分隔的文件更加健壮,因此已经成功地用这种方法解决了诸如此类的问题。
我有一个类似的错误,问题是我有一些转义引号在我的csv文件,需要设置escapechar参数适当。
你可以这样做,以避免问题-
train = pd.read_csv('/home/Project/output.csv' , header=None)
just add - header=None
希望这能有所帮助!!