从熊猫数据框中获取索引值

时间:2020-10-04 13:22:55

标签: python pandas indexing series

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

Series

我使用了iloc,但是我得到了数据(7.542)

return countries.iloc[2]
7.542

2 个答案:

答案 0 :(得分:3)

直接调用索引

return countries.index[2]

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

countries['Country_Name'].iloc[2]

答案 1 :(得分:0)

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

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

但是,示例代码return countries.iloc[2] #7.542建议您进行一系列操作,因为它仅返回标量值,而不返回带有索引和数据类型的key:value对(请参见下文)。

因此,让我们假设您有一个数据框,正如您所说的那样,其中有一列值和“ 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

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

数据框和数据系列均具有相同的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

几乎可以肯定您正在制作一个系列。我不确定是否有可能具有未命名列的数据框。