Pandas“.loc”方法未按预期工作

Pandas ".loc" method not working as expected

为什么会这样?

import pandas as pd

numbers = {'mynumbers': [51, 52, 53, 54, 55]}
df = pd.DataFrame(numbers, columns =['mynumbers'])
df.loc[df['mynumbers'] <= 53, 'mynumbers'] = 'True'
print (df)

输出:

  mynumbers
0      True
1      True
2      True
3     False
4     False

但是这个returns一个错误:

import pandas as pd

numbers = {'mynumbers': [51, 52, 53, 54, 55]}
df = pd.DataFrame(numbers, columns =['mynumbers'])
print(df.loc[df['mynumbers']])

如果在第一种情况下我可以使用“df.loc[df['mynumbers']]”语句作为比较值的条件,为什么我只是尝试时会出错单独打印语句?

我知道我传递给 .loc 方法的索引值会产生一个键错误,因为不存在这样的键,但我不明白为什么它在第一个实例中起作用?

当您执行 df['mynumbers'] <= 53 时,您使用的是布尔索引器,这是一个与 df 具有相同索引且值是 TrueFalse 的系列:

>>> df['mynumbers'] <= 53
0     True
1     True
2     True
3    False
4    False
Name: mynumbers, dtype: bool

这可以传递给 df.loc[]df[]:

>>> df[df['mynumbers'] <= 53]
   mynumbers
0         51
1         52
2         53
>>> df.loc[df['mynumbers'] <= 53, :]
   mynumbers
0         51
1         52
2         53

另一种使用df.loc[]的方法是传入索引值:

>>> df.loc[df.index]
   mynumbers
0         51
1         52
2         53
3         54
4         55
>>> df.loc[df.index[3:]]
   mynumbers
3         54
4         55
>>> df.loc[[1, 2]]
   mynumbers
1         52
2         53

然而,当您执行 df.loc[df['mynumbers']] 时,您正在执行这 2 个选项中的 none。它试图在索引中找到对象 df['mynumbers'],如以下错误所示,但没有成功:

KeyError: "None of [Int64Index([51, 52, 53, 54, 55], dtype='int64')] are in the [index]"