我试图使用熊猫操作.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模块还是其他语言?
文件来自晨星公司
当前回答
我从同事那里收到了.csv文件,当我试图使用pd.read_csv()读取csv文件时,我收到了类似的错误。显然,它试图使用第一行来为数据框架生成列,但许多行包含的列比第一行所暗示的要多。我最终通过简单地打开文件并重新保存为.csv并再次使用pd.read_csv()来解决这个问题。
其他回答
问题出在分隔符上。找出在数据中使用的分隔符类型,并如下所示指定它:
data = pd.read_csv('some_data.csv', sep='\t')
我有一个已有行号的数据集,我使用index_col:
pd.read_csv('train.csv', index_col=0)
我遇到了这个问题,我试图在不传递列名的情况下读取CSV。
df = pd.read_csv(filename, header=None)
我事先在一个列表中指定了列名,然后将它们传递到名称中,它立即解决了这个问题。如果您没有设置列名,您可以创建与数据中可能存在的最大列数量一样多的占位符名称。
col_names = ["col1", "col2", "col3", ...]
df = pd.read_csv(filename, names=col_names)
下面的命令序列工作(我丢失了数据的第一行-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)
我有一个类似的问题,而试图读取一个制表符分隔表与空格,逗号和引号:
1115794 4218 "k__Bacteria", "p__Firmicutes", "c__Bacilli", "o__Bacillales", "f__Bacillaceae", ""
1144102 3180 "k__Bacteria", "p__Firmicutes", "c__Bacilli", "o__Bacillales", "f__Bacillaceae", "g__Bacillus", ""
368444 2328 "k__Bacteria", "p__Bacteroidetes", "c__Bacteroidia", "o__Bacteroidales", "f__Bacteroidaceae", "g__Bacteroides", ""
import pandas as pd
# Same error for read_table
counts = pd.read_csv(path_counts, sep='\t', index_col=2, header=None, engine = 'c')
pandas.io.common.CParserError: Error tokenizing data. C error: out of memory
这表明它与C解析引擎(这是默认的)有关。也许换成python会改变一切
counts = pd.read_table(path_counts, sep='\t', index_col=2, header=None, engine='python')
Segmentation fault (core dumped)
这是一个不同的错误。 如果我们继续尝试从表中删除空格,来自python-engine的错误再次改变:
1115794 4218 "k__Bacteria","p__Firmicutes","c__Bacilli","o__Bacillales","f__Bacillaceae",""
1144102 3180 "k__Bacteria","p__Firmicutes","c__Bacilli","o__Bacillales","f__Bacillaceae","g__Bacillus",""
368444 2328 "k__Bacteria","p__Bacteroidetes","c__Bacteroidia","o__Bacteroidales","f__Bacteroidaceae","g__Bacteroides",""
_csv.Error: ' ' expected after '"'
很明显,熊猫在解析我们的行时遇到了问题。为了用python引擎解析一个表,我需要事先从表中删除所有的空格和引号。与此同时,c引擎不断崩溃,即使逗号在行。 为了避免创建一个带有替换的新文件,我这样做了,因为我的表很小:
from io import StringIO
with open(path_counts) as f:
input = StringIO(f.read().replace('", ""', '').replace('"', '').replace(', ', ',').replace('\0',''))
counts = pd.read_table(input, sep='\t', index_col=2, header=None, engine='python')
博士tl; 更改解析引擎,尽量避免在数据中使用任何非分隔的引号/逗号/空格。