2017-04-18 172 views
1

我正在处理超过百万条目的CSV文件。我试图将每个候选人的数据作为单独的列读取。我能够解析第一个候选人的数据,但是当我到达下一个候选人时,我得到的错误['cand_nm']不在索引中。熊猫。 pd.read_csv KeyError:不在索引错误

下面是该文件的链接:Link to data file

%matplotlib 
import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 

第一候选

reader_bachmann = pd.read_csv('P00000001-ALL.csv', squeeze=True, low_memory=False, nrows=411) 
print(reader_bachmann) 
cand_bachmann = reader_bachmann[["cand_nm"]] 
print(cand_bachmann) 

第二位候选

reader_romney = pd.read_csv('P00000001-ALL.csv', skiprows=range(0,411) , na_filter =True, low_memory=False) 
print(reader_romney) 
cand_romney = reader_romney[["cand_nm"]] 
print(cand_romney) 

错误消息

KeyError: "['cand_nm'] not in index" 
+0

第一行标题?看起来你的'skiprows = range(0,411)'会跳过标题,导致'cand_nm'未定义索引 – Yeile

+0

谢谢。它解决了这个问题。 – pooh098

回答

2

当你使用skip_rows这样你就失去了标题。因此,您的标题为reader_romney现在是行号412.如果这是您想要读取该文件的方式,则需要将标题行存储到字符串列表中,然后将该列表作为names= kwarg传递。例如

r_bachman = pd.read_csv('P00000001-ALL.csv', squeeze=True, low_memory=False, 
         nrows=411) 
cols = r_bachman.columns 
r_romney = pd.read_csv('P00000001-ALL.csv', skiprows=range(0,411), 
         na_filter =True, low_memory=False, names=cols) 
+0

谢谢。它解决了这个问题。 – pooh098