我试图使用熊猫操作.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模块还是其他语言?
文件来自晨星公司
当前回答
标记数据错误。C错误:第3行有2个字段,见12
这个错误给出了解决问题“Expected 2 fields in line 3, saw 12”的线索,saw 12表示第二行长度为12,第一行长度为2。
当您有如下所示的数据时,如果您跳过行,那么大部分数据将被跳过
data = """1,2,3
1,2,3,4
1,2,3,4,5
1,2
1,2,3,4"""
如果您不想跳过任何行,请执行以下操作
#First lets find the maximum column for all the rows
with open("file_name.csv", 'r') as temp_f:
# get No of columns in each line
col_count = [ len(l.split(",")) for l in temp_f.readlines() ]
### Generate column names (names will be 0, 1, 2, ..., maximum columns - 1)
column_names = [i for i in range(max(col_count))]
import pandas as pd
# inside range set the maximum value you can see in "Expected 4 fields in line 2, saw 8"
# here will be 8
data = pd.read_csv("file_name.csv",header = None,names=column_names )
使用range而不是手动设置名称,因为当您有很多列时,这样做会很麻烦。
此外,如果需要使用均匀的数据长度,可以将NaN值填充为0。如。对于聚类(k-means)
new_data = data.fillna(0)
其他回答
这看起来很丑,但你会有你的数据框架
import re
path = 'GOOG Key Ratios.csv'
try:
data = pd.read_csv(path)
except Exception as e:
val = re.findall('tokenizing.{1,100}\s*Expected\s*(\d{1,2})\s*',str(e),re.I)
data = pd.read_csv(path, skiprows=int(val[0])-1)
解析器被文件头弄糊涂了。它读取第一行并从该行推断列数。但是前两行并不能代表文件中的实际数据。
用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参考。
使用 熊猫。read_csv (CSVFILENAME,头= None, 9 = " ")
当试图从链接中读取CSV数据时
http://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data
我将该网站的数据复制到我的csv文件中。它有额外的空格,所以使用sep =', '并且它工作:)
我有同样的问题,当read_csv: ParserError:错误标记数据。 我只是把旧的csv文件保存为一个新的csv文件。问题解决了!