如何使用Pandas获取所有值为常量的列?
找出DataFrame中所有行值相同的列
嘿,我来帮你解决这个问题!要找出DataFrame里所有行值都相同的列,其实有两种简单的方法,直接看代码和解释就行:
import pandas as pd d = {'A': [1,3,4], 'B': ['hi','hi','hi'], 'C': [2,2,2], 'D': ['a','b','c']} df = pd.DataFrame(data=d) # 方法1:用nunique()统计唯一值数量 same_value_cols = df.columns[df.nunique() == 1].tolist() print(same_value_cols) # 输出: ['B', 'C'] # 方法2:验证整列元素是否与第一行元素一致 same_value_cols = df.columns[df.eq(df.iloc[0]).all()].tolist() print(same_value_cols) # 输出: ['B', 'C']
两种方法的详细解释:
方法1(nunique()):
df.nunique()会返回每一列的唯一值个数,比如列B的唯一值只有1个(全是'hi'),列C同理唯一值是2。- 我们通过
df.nunique() == 1生成布尔索引,筛选出符合条件的列,最后用.tolist()转换成你需要的列表格式。
方法2(eq()+all()):
df.eq(df.iloc[0])会把DataFrame中每个元素和该列第一行的元素做相等比较,得到一个布尔值构成的DataFrame。.all()会检查每一列是否所有值都是True(也就是整列所有元素都和第一行一样),再通过布尔索引筛选出这些列并转成列表。
你之前尝试的.any()是用来判断“是否存在至少一个符合条件的元素”,和我们需要的“所有元素都符合条件”正好相反,换成.all()配合合适的比较逻辑就能完美解决啦。
内容的提问来源于stack exchange,提问作者tbienias
相关产品推荐
相关产品推荐

