在 Pandas 数据框 .loc 中使用 Python 的“in”运算符

我正在使用一些 Pandas 数据帧,但我不太明白为什么允许使用某些布尔运算符并在 -selector 中工作,.loc而其他运算符会出错。准确地说,让我们采用以下数据框:


import pandas as pd

df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),

                   'B': 'one one two thr two two one thr'.split()})

现在两者'two' == 'two'都'w' in 'two'评估为True,但是当与df.loc[...]以下作品一起使用时:


df.loc[df['B'] == 'two']

打印出来


         A       B

    2   foo     two

    4   foo     two

    5   bar     two

但以下引发了一个KeyError: False错误。


df.loc['w' in df['B']]

我知道解决这个问题的方法,但没有一个感觉特别顺利,更糟糕的是我根本不明白为什么 -selector'w' in df['B']不允许在.loc.


月关宝盒
浏览 369回答 2
2回答

蛊毒传说

查看 的输出df['B'] == 'two并将其与 的输出进行比较'w' in df['B']。第一个将输出一个熊猫系列,其中每一行包含 True 或 False df['B']。第二个将输出False.运算.loc符可以采用“与被切片的轴长度相同的布尔数组,例如 [True, False, True]”。您获得了KeyError: False因为.loc试图找到False既不是列名也不是行名的。要使用w in df['B']-expression 你可以这样做:list_true_false = ['w' in entry for entry in df['B']]` df.loc[list_true_false]`

慕尼黑5688855

您需要 isin 运算符或包含函数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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python