Я новичок в python/pandas и пытаюсь просмотреть столбец фрейма данных и распечатать все сокращения штата США (чтобы получить данные из Quandl). Я не знаю, почему я не могу выбрать столбцы по номеру, и цикл for не будет перебирать столбец по имени.
fifty_states
список фреймов данных, а fifty_states[0]
— конкретный фрейм данных, который мне нужен (50 строк x 13 столбцов). print(fifty_states[0]['Abbreviation'])
дает интересующий меня столбец, но мой цикл for должен быть ошибочным, поскольку он возвращает только «FMAC/HPI_Abbreviation».
fifty_states=pd.read_html('https://simple.wikipedia.org/wiki/List_of_U.S._states')
for abbv in fifty_states[0]['Abbreviation']:
print("FMAC/HPI_"+str(abbv))
Я попытался сослаться на столбец по номеру, т. Е. fifty_states[0][0]
, но независимо от номера столбца возвращается KeyError номера столбца, который я пробовал, например, здесь будет написано «KeyError: 0».
Я ожидаю вывод с 50 такими строками:
FMAC/HPI_AL
FMAC/HPI_AK
FMAC/HPI_AR
...
FMAC/HPI_WV
FMAC/HPI_WY
for row in fifty_states[0].iteritems():
print(row)
Хотя итерация по фрейму данных - плохая идея, как говорят вам люди.
Вы можете перебирать свой столбец с помощью цикла for :
for i in fifty_states['Abbreviation']:
print(i)
Я думаю, что вы должны добавить header = 0
к read_html. Это скажет pandas прочитать первую строку как метки столбцов для DataFrame. Без этого столбец DataFrame не будет помечен как «Аббревиатура», поэтому вы получаете ключевую ошибку. Если вы укажете pd.read_html в качестве аргумента заголовка, вы сможете использовать остальную часть своего кода без изменений.
fifty_states=pd.read_html('https://simple.wikipedia.org/wiki/List_of_U.S._states', header=0)
for abbv in fifty_states[0]['Abbreviation']:
print("FMAC/HPI_"+str(abbv))
Спасибо! Это сработало :) Я также решил эту проблему, будучи более скрупулезным с моим синтаксисом: ```для abbv в пятьдесят_состояний[0][пятьдесят_состояний[0].columns[1]]: print("FMAC/HPI_"+str(abbv) ) ```
Похоже, у вас есть мультииндекс. Вместо этого вы можете попытаться получить доступ к значениям с помощью:
fifty_states[0]['Abbreviation'].values
. Но я не знаю, подходит ли это к вашему решению. Вот как вы это понимаете:print(fifty_states[0].columns)