在python中使用布尔逻辑隔离pandas列

时间:2016-10-08 22:02:57

标签: python pandas dataframe

我试图获取满足以下一个或两个布尔语句的数据帧的行:

1) df['colName'] == 0
2) df['colName'] == 1

我已尝试过这些,但两个都没有效果(抛出错误):

df = df[df['colName']==0 or df['colName']==1]
df = df[df['colName']==0 | df['colName']==1]

还有其他想法吗?

2 个答案:

答案 0 :(得分:1)

您遗失()

df = df[(df['colName']==0) | (df['colName']==1)]

这可能会引发复制警告但仍然有效。

如果您不想要复制警告,请使用索引器:

indexer = df[(df['colName']==0) | (df['colName']==1)].index
df = df.loc[indexer,:]

答案 1 :(得分:1)

您可以使用eq代替==

清理已完成的工作
df[df.colName.eq(0) | df.colName.eq(1)]

对于这种情况,我建议使用isin

df[df.colName.isin([0, 1])]

使用query也可以,但速度较慢

df.query('colName in [0, 1]')

<强> 时序
isin下面定义的df是最快的 df = pd.DataFrame(np.random.randint(3, size=10000), columns=['colName'])

enter image description here