我正在尝试使用.isin
方法,但没有预期的结果。
以下是一个可重复性最小的示例
import pandas as pd
df = pd.DataFrame({'num_legs': [2, 4], 'num_wings': [2, 0]}, index=['falcon', 'dog'])
print(df)
print(df[df.isin([0, 2])])
它不会删除行,而是用NaN替换单元格。
对于过滤需要bolean系列,如果选中所有列,则获取布尔DataFrame:
所以如果需要测试每行是否至少有一个True使用DataFrame.any
,如果需要测试是否每行所有True都使用DataFrame.all
:
print (df.isin([0, 2]))
num_legs num_wings
falcon True True
dog False True
print (df.isin([0, 2]).any(axis=1))
falcon True
dog True
dtype: bool
print (df.isin([0, 2]).all(axis=1))
falcon True
dog False
dtype: bool
print(df[df.isin([0, 2]).any(axis=1)])
num_legs num_wings
falcon 2 2
dog 4 0
print(df[df.isin([0, 2]).all(axis=1)])
num_legs num_wings
falcon 2 2