Pandas:使用.loc()和/或.iloc()选择特定行和特定列

5kgi1eie  于 2023-05-12  发布在  其他
关注(0)|答案(2)|浏览(164)

我有一个Pandas dataframe,看起来像这样:

df = pd.DataFrame ({
    
'id': [1, 17, 19, 17, 22, 3, 0, 3],
'color': ['Green', 'Blue', 'Orange', 'Yellow', 'White', 'Silver', 'Purple', 'Black'],
'shape' : ['Circle', 'Square', 'Circle', 'Triangle', 'Rectangle', 'Circle', 'Square', 'Triangle'],
'person' : ['Sally', 'Bob', 'Tim', 'Sue', 'Bill', 'Diane', 'Brian', 'Sandy']
    
})

df

    id      color     shape       person
0   1       Green     Circle      Sally
1   17      Blue      Square      Bob
2   19      Orange    Circle      Tim
3   17      Yellow    Triangle    Sue
4   22      White     Rectangle   Bill
5   3       Silver    Circle      Diane
6   0       Purple    Square      Brian
7   3       Black     Triangle    Sandy

我将索引设置为color
df.set_index ('color', inplace = True )

id    shape       person
color           
Green     1     Circle      Sally
Blue      17    Square      Bob
Orange    19    Circle      Tim
Yellow    17    Triangle    Sue
White     22    Rectangle   Bill
Silver    3     Circle      Diane
Purple    0     Square      Brian
Black     3     Triangle    Sandy

我想只选择列idperson,只选择索引2和3。为此,我使用以下命令:

new_df = df.loc[:, ['id', 'person']][2:4]

new_df

          id    person
color       
Orange    19    Tim
Yellow    17    Sue

感觉这可能不是最“优雅”的方法。除了使用[2:4]对行进行切片,是否有一种方法可以有效地*组合.loc(以获得列)和.iloc(以获得行)?
谢谢!

jrcvhitl

jrcvhitl1#

或者,您可以从df.iloc开始(指定切片或任意索引),并在最后过滤列名:

df.iloc[[2,3]][['id', 'person']]
gblwokeq

gblwokeq2#

一种选择是删除df.set_index('color', inplace=True)并以如下方式使用loc

new_df = df.loc[2:3, ['color', 'id', 'person']].set_index('color')

输出:

print(new_df)

        id person
color            
Orange  19    Tim
Yellow  17    Sue

相关问题