如何检查Pandas DataFrame各列取值是否全部等于指定值
Pandas 逐列校验全列值是否等于指定值的实现
直接写all(df == 2.5)完全达不到逐列判断的效果——因为df == 2.5返回的是和原表同形状的布尔矩阵,套Python内置的all()会把整个矩阵当成整体判断,没法输出每一列的独立校验结果。
核心实现逻辑
Pandas 自带的.all()方法默认就是按列维度做聚合判断,刚好匹配逐列校验的需求,步骤非常直接:
- 先把原DataFrame和目标值2.5做逐元素比对,得到同结构的布尔值矩阵
- 对这个布尔矩阵调用列维度的
.all(),就能直接拿到每列的判断结果
对应可运行的代码片段:
import pandas as pd # 构造和提问结构一致的示例DataFrame df = pd.DataFrame({ "x_data": [2.5, 2.5, 2.5, 2.5], "y_data": [2.5, 2.5, 2.5, 2.5] }) # 逐列判断全列值是否等于2.5 col_bool_result = (df == 2.5).all()
运行后col_bool_result的输出为:
x_data True y_data True dtype: bool
如果要得到期望的1 1格式的数值结果,只需要把布尔值转成整数类型即可:
int_result = col_bool_result.astype(int)
转值后的输出为:
x_data 1 y_data 1 dtype: int64
如果需要输出不带列名的纯1 1文本格式,可以提取值拼接打印:
print(" ".join(map(str, int_result.values))) # 控制台实际输出:1 1
实用提示:做浮点值等值校验时,可能遇到浮点精度导致的判断失真,比如计算得到的2.5实际存储值和字面2.5存在极微小偏差。这种场景可以替换成带容错的判断逻辑:
import numpy as np # 逐列做带浮点容错的等值判断 col_bool_result = df.apply(lambda col: np.isclose(col, 2.5).all()) col_bool_result.astype(int)
内容的提问来源于stack exchange,提问作者emma19
相关产品推荐
相关产品推荐

