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
具有相同索引且值是 True
或 False
的系列:
>>> 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]"
为什么会这样?
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
具有相同索引且值是 True
或 False
的系列:
>>> 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]"