question how to deal with KeyError: 0 or KeyError: 1 etc

question how to deal with KeyError: 0 or KeyError: 1 etc

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

在这种情况下,我使用的是 quandl 的房价指数,但不幸的是,当我需要从 wiki 页面获取缩写名称时,我总是遇到相同的错误 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 个州,然后根据这些数据进行数据分析。

谁能告诉我我做错了什么?干杯

注意 fifty_states 是一个 list DataFrames,填充了 来自源页面的 table 的内容。

它们中的第一个(在 fifty_states 中的索引 0 处)是美国各州的 table .

如果您不知道 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 级别有 CitiesCapital 在第二层。

回到你的代码,运行:

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()