我试图使用熊猫操作.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=";")
其他回答
下面的命令序列工作(我丢失了数据的第一行-no header=None present-,但至少它加载):
Df = pd.read_csv(文件名, usecols =范围(0,42)) df。列=[‘年’,‘莫’,‘天’,“人力资源”,“分”,“秒”,“猎狗”, ' error ', ' rectype ', ' lane ', ' speed ', ' class ', ' length ' ' gvw ' ' esal ' ' w1 ' ' s1 ' ' w2 ' ' s2 ' ' w3 ' ' s3 ' ' w4 ' ' s4 ' ' w5 ' ' s5 ' ' w6 ' ' s6 ' ' w7 ' ' s7 ' ' w8 ' ' s8 ' ' w9 ' ' s9 ' ' w10 ' ' s10 ' ' w11 ', ' s11 ', ' w12 ', ' s12 ', ' w13 ', ' s13 ', ' w14 ']
以下不工作:
Df = pd.read_csv(文件名, 名称=[‘年’,‘莫’,‘天’,“人力资源”,“分”,“秒”,“猎狗”, ' error ', ' rectype ', ' lane ', ' speed ', ' class ', ' length ' ' gvw ' ' esal ' ' w1 ' ' s1 ' ' w2 ' ' s2 ' ' w3 ' ' s3 ' ' w4 ' ' s4 ' ' w5 ' ' s5 ' ' w6 ' ' s6 ' ' w7 ' ' s7 ' ' w8 ' ' s8 ' ' w9 ' ' s9 ' ' w10 ' ' s10 ' ' w11 ', ' s11 ', ' w12 ', ' s12 ', ' w13 ', ' s13 ', ' w14 '], usecols =范围(0,42))
CParserError:标记数据错误。C错误:在1605634行中预期有53个字段,看到54 以下不工作:
df = pd read_csv(文件) 标题=郎)
CParserError:标记数据错误。C错误:在1605634行中预期有53个字段,看到54
因此,在你的问题中,你必须传递usecols=range(0,2)
在处理类似的解析错误时,我发现另一种方法很有用,它使用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模块对于格式不佳的逗号分隔的文件更加健壮,因此已经成功地用这种方法解决了诸如此类的问题。
大多数有用的答案已经提到了,但是我建议将pandas数据框架保存为parquet文件。Parquet文件没有这个问题,同时它们是内存高效的。
我遇到过这样的错误,一个丢失的引号。我使用映射软件,当导出以逗号分隔的文件时,它会在文本项周围加上引号。使用引号的文本(例如:' =英尺和' =英寸)可能会导致分隔符冲突。考虑下面这个例子,5英寸的测井曲线打印很差:
UWI_key,经度,纬度,备注 US42051316890000, 30.4386484, -96.4330734,“可怜的5””
用5英寸作为5英寸的简写,最终会给工作带来麻烦。Excel会简单地去掉额外的引号,但是Pandas没有上面提到的error_bad_lines=False参数就会失效。
有时单元格中有一个逗号“,”。因此,熊猫不能读它。 尝试使用“;”分隔符
df = pd.read_csv(r'yourpath', delimiter=";")