我正在使用一些 Pandas 数据帧,但我不太明白为什么允许使用某些布尔运算符并在 -selector 中工作,.loc而其他运算符会出错。准确地说,让我们采用以下数据框:import pandas as pddf = 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.
2 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
查看 的输出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
TA贡献1848条经验 获得超2个赞
您需要 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
添加回答
举报
0/150
提交
取消