You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选pandas DataFrame保留特定值及排除含非二进制数值的行

嘿,这两个pandas的操作其实挺常用的,我来给你详细讲讲怎么实现:

1. 如何筛选pandas DataFrame,使其仅包含特定值?

这个需求可以分两种常见场景,咱们分别来看:

场景1:筛选某一列中包含特定值的行

如果只是想保留某列等于特定值的行,用isin()方法就很方便。比如你要保留AB列值为1的行:

# 筛选AB列值为1的行
filtered_df = df[df['AB'].isin([1])]

如果要匹配多个特定值,直接把值放进列表里就行,比如df[df['AB'].isin([0,1])]就能保留AB列是0或1的行。

场景2:筛选整个DataFrame中所有元素都属于特定值集合的行

要是你想保留所有单元格的值都在特定集合里的行(比如只保留全是0和1的行),可以结合isin()和all()来实现:

# 保留所有元素都是0或1的行
filtered_df = df[df.isin([0,1]).all(axis=1)]

2. 如何排除任意列包含非二进制(0或1)数值的行?

你的需求是:只要某一行里任意一列出现非0/1的数,就删掉这行。咱们可以用反向逻辑来实现:

首先,创建一个布尔掩码,标记出所有元素都在{0,1}范围内的行:

# 检查每一行的所有元素是否都是0或1
mask = df.isin([0, 1]).all(axis=1)

然后用这个掩码筛选DataFrame,只保留符合条件的行(也就是排除了有非二进制值的行):

# 得到仅包含二进制值的行
cleaned_df = df[mask]

咱们用你给的示例数据测试一下:

import pandas as pd

array = [[1, 0, 0, 0, 0, 0, 2], [1, 0, 0, 1, 0, 0, 0], [2, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0], [1, 0, 0, 3, 0, 0, 0]]
df = pd.DataFrame(array, columns = ['AB','AC','CB','DE','FA','CD','AF'] )

mask = df.isin([0,1]).all(axis=1)
cleaned_df = df[mask]
print(cleaned_df)

运行后得到的结果就是原DataFrame的第1和第3行(对应索引1和3),正好符合你要删除第0、2、4行的需求。

如果你想直接修改原DataFrame,可以用df.drop(df[~mask].index, inplace=True),不过一般更推荐创建新的DataFrame,避免误改原始数据。


内容的提问来源于stack exchange,提问作者Jiamei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 13:02:57