使用Python';dataframe.loc中的s`in`-运算符
我正在处理一些Pandas数据帧,我不太明白为什么允许一些布尔运算符在使用Python';dataframe.loc中的s`in`-运算符,python,pandas,dataframe,Python,Pandas,Dataframe,我正在处理一些Pandas数据帧,我不太明白为什么允许一些布尔运算符在.loc-选择器中工作,而其他的则给出了一个错误。准确地说,让我们使用以下数据帧: 将熊猫作为pd导入 df=pd.DataFrame({'A':'foo-bar-foo-bar-foo-bar-foo-foo'.split(), 'B':'one-one-thr-two-two-one-thr'.split()}) 现在,在'two'中的'two'=='two'和'w'都计算为True,但与df.loc[…]一起使用时,以
.loc
-选择器中工作,而其他的则给出了一个错误。准确地说,让我们使用以下数据帧:
将熊猫作为pd导入
df=pd.DataFrame({'A':'foo-bar-foo-bar-foo-bar-foo-foo'.split(),
'B':'one-one-thr-two-two-one-thr'.split()})
现在,在'two'中的'two'=='two'
和'w'都计算为True
,但与df.loc[…]
一起使用时,以下工作:
df.loc[df['B']=='two']
打印
A B
2 foo two
4 foo two
5 bar two
但是下面会引发一个KeyError:False
-error
df.loc['w'在df['B']]
我知道解决这个问题的方法,但没有一种感觉特别流畅,更糟糕的是,我根本不明白为什么在中不允许使用df['B']
-选择器中的'w'
查看df['B']='two的输出,并将其与df['B']
中的'w'的输出进行比较。第一个将为df['B']
中的每一行输出一个包含True或False的panda系列。第二个将输出False
.loc
运算符可以采用“与被切片轴长度相同的布尔数组,例如[真、假、真]”(请参阅)。您获得KeyError:False
是因为.loc
试图查找既不是列名称也不是行名称的False
要在df['B']
-表达式中使用w,可以执行以下操作:
list_true_false=['w'在条目中表示df['B']]`
df.loc[列表\u正确\u错误]`
希望有帮助 df['B']中的'w'
只返回一个结果True或False;不关心哪个索引为真或假.loc[]
需要数据帧的索引,但是您没有向其中传递任何索引,因此它会抛出错误。最有可能的情况是您得到了keyrerror。
df.loc[df['B'].isin(['two'])] # to match the full word specify it as list
df.loc[df['B'].str.contains('w')] # to match the pattern or a letter