问题如何处理KeyError:0或KeyError:1等

时间:2019-08-24 14:05:47

标签: python pandas quandl

我是python和这个数据科学界的新手,我正在尝试使用不同的数据集。

在这种情况下,我使用的是quandl的住房价格指数,但是不幸的是,当我需要从Wiki页面获取缩写名称时,总是遇到相同的Error KeyError错误。

import quandl
import pandas as pd
#pull every single housing price index from quandl

#quandl api key
api_key = 'xxxxxxxxxxxx'

#get stuff from quandl
df = quandl.get('FMAC/HPI_AK',authtoken = api_key) #alaska \
##print(df.head())

#get 50 states using pandas read html from wikipedia
fifty_states = pd.read_html('https://en.wikipedia.org       /wiki/List_of_states_and_territories_of_the_United_States')
##print(fifty_states[0][1]) #first data frame is index 0, #looking for     column 1,#from element 1 on

#get quandl frannymac query names for each 50 state
for abbv in fifty_states[0][1][2:]:
#print('FMAC/HPI_'+str(abbv))

所以我在以下步骤中遇到了问题:

#get 50 states using pandas read html from wikipedia
fifty_states = pd.read_html('https://en.wikipedia.org       /wiki/List_of_states_and_territories_of_the_United_States')
##print(fifty_states[0][1]) #first data frame is index 0, #looking for     column 1,#from element 1 on

我尝试了不同的方法来获得缩写但不起作用

for abbv in fifty_states[0][1][2:]:
#print('FMAC/HPI_'+str(abbv)) 

for abbv in fifty_states[0][1][1:]:
#print('FMAC/HPI_'+str(abbv))

总是Keyerror:0

我只需要执行此步骤,并获得以下输出:

FMAC/HPI_AL,
FMAC/HPI_AK,
FMAC/HPI_AZ,
FMAC/HPI_AR,
FMAC/HPI_CA,
FMAC/HPI_CO,
FMAC/HPI_CT,
FMAC/HPI_DE,
FMAC/HPI_FL,
FMAC/HPI_GA,
FMAC/HPI_HI,
FMAC/HPI_ID,
FMAC/HPI_IL,
FMAC/HPI_IN,
FMAC/HPI_IA,
FMAC/HPI_KS,
FMAC/HPI_KY,
FMAC/HPI_LA,
FMAC/HPI_ME

针对美国的50个州,然后根据这些数据进行数据分析。

有人可以告诉我我做错了什么吗?欢呼

1 个答案:

答案 0 :(得分:0)

请注意,fifty_states是数据框的列表,其中填充了 源页面中表的内容。

其中第一个是美国各州的表格(在 fifty_states 中的索引 0 中)。

如果您不知道DataFrame中的列名(例如 df ), 要从中获取列1(数字形式 0 ),请运行:

df.iloc[:, 1]

因此,由于我们希望从 fifty_states [0] 中访问此列,所以运行:

fifty_states[0].iloc[:, 1]

您的代码失败,因为您尝试将 [1] 应用于此DataFrame, 但是此DataFrame没有名为 1 的列。

请注意,例如fifty_states[0][('Cities', 'Capital')]给出正确的结果, 因为:

  • 此DataFrame在列上具有MultiIndex,
  • 其中一个列在第一个MultiIndex级别具有 Cities Capital 在第二级。

然后回到您的代码,运行:

for abbv in fifty_states[0].iloc[:, 1]:
    print('FMAC/HPI_' + str(abbv))

请注意,不需要 [2:] 。您可能想跳过2个初始行 HTML标记

的名称,其中包含列名, 但在 Pandas 中,它们实际上保留在MultiIndex的列中, 这样就可以获取所有值,而无需跳过任何内容。

如果要将这些字符串作为列表,以备将来使用,则代码可以是:

your_list = ('FMAC/HPI_' + fifty_states[0].iloc[:, 1]).tolist()