【问题标题】:Get index value from pandas dataframe从熊猫数据框中获取索引值
【发布时间】:2021-01-19 12:34:48
【问题描述】:

我有一个 Pandas 数据框(国家),需要获取特定的索引值。 (说索引 2 => 我需要日本)

我使用了 il​​oc,但我得到了数据 (7.542)

return countries.iloc[2]
7.542

【问题讨论】:

  • 你确定这是一个系列而不是一个数据框?
  • 也许混淆与数据框中的每一列都是一个系列这一事实有关。 @beshr,您是在数据框中的一列(或多列)上操作,还是直接处理数据框?
  • 投反对票。由于编辑队列已满:标题非常模糊。您想从 df 的选定索引中获取值。人们可能会像搜索给定 df 值的索引值一样读取标题。

标签: python pandas indexing series


【解决方案1】:

直接调用索引

return countries.index[2]

但是您在此处发布的内容看起来像是 pandas 数据框而不是系列 - 如果是这样的话,请这样做

countries['Country_Name'].iloc[2]

【讨论】:

  • 第二个解决方案不适用于我的数据框,但第一个解决方案可以。第二种解决方案适用于访问列中的值。如果你想要列的值的索引,你会做countries['Country_Name'].index[2]
【解决方案2】:

这正是我的问题!阅读其他回复帮助我找到了这个答案。

正如其他回答者所提到的,表格的呈现结构看起来像您有一个包含两列的数据框,一列用于“Country_Names”,另一列用于值,在这种情况下,索引将默认为 [0, 1 ... n]。

但是,您的示例代码 return countries.iloc[2] #7.542 表明您有一个系列,因为它只返回一个标量值,而不是带有索引和数据类型的键:值对(见下文)。

因此,假设您有一个数据框,正如您所说的那样,其中有一列值和“Country_Names”作为索引。我将为值列添加名称并添加第二个值列:

countries = pd.DataFrame({'Country_Names': ['China', 'United States', 'Japan', 'United Kingdom', 'Russian Federation', 'Brazil'],
                          'Values1': [1.5, 10.53, 7.542, 3.487, 6.565, 8.189],
                          'Values2': [1,2,3,4,5,6]}).set_index('Country_Names')
print(countries)

#                     Values1  Values2
# Country_Names                       
# China                 1.500        1
# United States        10.530        2
# Japan                 7.542        3
# United Kingdom        3.487        4
# Russian Federation    6.565        5
# Brazil                8.189        6

顺便说一下,数据框的每一列是一个系列,与它所属的数据框共享一个索引。也就是说,您可以只有一列,它仍然是一个数据框,尽管访问第一列会返回一个系列(见下文)。

dataframes 和 series' 有共同的 index 属性,以及其他属性。

countries.index[2] #The 3rd index of the dataframe:
# 'Japan'

countries['Values1'].index[2] #The 3rd index of the 1st column (which is a series)
# 'Japan'

countries.iloc[2] #The 3rd row of the dataframe.
# Values1    7.542
# Values2    3.000
# Name: Japan, dtype: float64

countries['Values1'].iloc[2] #The 3rd row of the 1st column (which is a series)
# 7.542

现在,如果您实际上只是在处理一个系列(如您的代码所示)而不是一个数据框,它看起来像这样:

Country_Names = ['China', 'United States', 'Japan', 'United Kingdom', 'Russian Federation', 'Brazil']
countries = pd.Series([1.5, 10.53, 7.542, 3.487, 6.565, 8.189], index=Country_Names)
countries

# China                  1.500
# United States         10.530
# Japan                  7.542
# United Kingdom         3.487
# Russian Federation     6.565
# Brazil                 8.189
# dtype: float64

countries.index[2]
# 'Japan'

countries.iloc[2]
# 7.542

不过,我不确定如何构建一个数据对象,该对象的打印结果类似于您在问题中的图片。

编辑

这是怎么做的。创建一个带有名称的索引并将该索引赋予一个系列:

Country_Names = pd.Index(['China', 'United States', 'Japan', 'United Kingdom', 'Russian Federation', 'Brazil'],
                         name='Country_Names')
countries_s = pd.Series([1.5, 10.53, 7.542, 3.487, 6.565, 8.189], index=Country_Names)
countries_s

# Country_Names
# China                  1.500
# United States         10.530
# Japan                  7.542
# United Kingdom         3.487
# Russian Federation     6.565
# Brazil                 8.189
# dtype: float64

这几乎证实了您正在处理一个系列。我不确定是否有可能有一个带有未命名列的数据框。

【讨论】:

    猜你喜欢
    • 2018-08-04
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 2022-07-10
    • 2019-05-21
    • 2022-01-25
    相关资源
    最近更新 更多