我正在使用一些 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
提交
取消