【问题标题】:How to iterate over a column of a data frame in pandas, column cannot be selected by number如何在pandas中迭代数据框的一列,不能按数字选择列
【发布时间】:2019-10-09 02:16:54
【问题描述】:

我是 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

【问题讨论】:

  • 看起来你在那里有一个多索引。您可以尝试使用以下命令访问这些值:fifty_states[0]['Abbreviation'].values。但我不知道这是否适合您的解决方案。以下是您的计算方法:print(fifty_states[0].columns)

标签: python pandas spyder


【解决方案1】:

我认为您应该将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))

【讨论】:

  • 谢谢!这行得通:)我还通过对语法更加谨慎来解决它:``` for abbv in Fifth_states[0][fifty_states[0].columns[1]]: print("FMAC/HPI_"+str(abbv) ) ```
【解决方案2】:
for row in fifty_states[0].iteritems():
    print(row)

尽管人们告诉你迭代数据框是个坏主意。

【讨论】:

    【解决方案3】:

    您可以使用 for 循环对您的列进行迭代:

    for i in fifty_states['Abbreviation']:
        print(i)
    

    【讨论】:

      猜你喜欢
      • 2021-07-08
      • 2023-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      相关资源
      最近更新 更多