如何理解pandas DataFrame.loc的第二个空参数



你好,我正在寻求帮助,以了解没有/有一个空的第二个参数熊猫DataFrame.loc方法引起的行为

考虑以下内容:

df=pd.DataFrame(index=pd.MultiIndex.from_tuples([('a', 1, 'x'),('a', 2, 'y'),('b', 1, 'x')]), data={'col_1':[1, 2, 3]})
df

输出:

<表类>col_1tbody><<tr>1x12y2b1x3

这里Pandas正在等待您指定第二个条件,以下面添加第二列为例。

import pandas as pd
tuples = [('a', 1, 'x'),('a', 2, 'y'),('b', 1, 'x')]
data1 = {'col_1':[1, 2, 3],'col_2':[4, 5, 6]}
df=pd.DataFrame(index=pd.MultiIndex.from_tuples(tuples), data=data1 )
x = df.loc [ ( slice(None), 1, slice(None) ) ]
y = (df.loc [ ( slice(None), 1, slice(None) ) , 'col_2' ])
z = (df.loc [ ( slice(None), 1, slice(None) ) , 'col_2' ]).loc [ ( slice(None), 1, slice(None) ) ]
print('2 Indexes here n' ,x,'n',x.index,'n')
print('3 indexes here n' ,y,'n',y.index,'n')
print('2 indexes here n' ,z,'n',z.index)
Outputs :
2 Indexes here 
col_1  col_2
a x      1      4
b x      3      6 
MultiIndex([('a', 'x'),('b', 'x')],) 
3 indexes here 
a  1  x    4
b  1  x    6
Name: col_2, dtype: int64 
MultiIndex([('a', 1, 'x'),('b', 1, 'x')],) 
2 indexes here 
a  x    4
b  x    6
Name: col_2, dtype: int64 
MultiIndex([('a', 'x'),('b', 'x')],)

第一次没有逗号的地方,你已经声明你只需要df.loc[(slice(None),1,slice(None))]。所以pandas会显示a和x。

如果您指定了您想要的内容,请键入eg print(df。loc [(slice(None), 1, 'x')]

It will output only 1 index because you have made it clear what you want.
col_1  col_2
a      1      4
b      3      6 
Index(['a', 'b'], dtype='object')

然而在第二次切片中,你提到你特别想要列2 !所以pandas显示了第一个和第二个索引。

希望我的解释清楚!