如何删除DataFrame中存在任意0值的列?已尝试df.loc[:, (df != 0)]无效
解决办法:删除包含0值的列
嘿,我明白你要做的事——删掉所有只要有一行是0的列,只保留完全没有0的列(也就是案例里的列c)。你之前用的df.loc[:, (df != 0)]之所以没用,是因为这个写法传入的是一个布尔DataFrame,而loc需要的是一维的布尔数组来筛选列,所以达不到预期效果。
下面给你两种简单有效的方法:
方法一:使用all()按列检查
我们可以先判断每一列的所有元素是否都不为0,再用这个结果来筛选列:
import pandas as pd # 先构造你的示例DataFrame data = {'a': [1, 2, 0], 'b': [0, 4, 8], 'c': [6, 7, 8]} df = pd.DataFrame(data) # 筛选出所有无0值的列 filtered_df = df.loc[:, df.ne(0).all(axis=0)]
解释一下:
df.ne(0)和df != 0作用一样,生成一个布尔矩阵,标记每个元素是否不等于0.all(axis=0)按列检查:只有当该列所有元素都为True(也就是全不为0)时,返回True,否则返回False- 把这个一维布尔数组传给
loc的列索引,就能精准保留符合要求的列
运行后filtered_df的结果就是:
c 0 6 1 7 2 8
方法二:先获取符合条件的列名再筛选
如果你想先明确看到要保留的列名,也可以这么写:
# 获取所有无0值的列名 valid_columns = df.columns[df.ne(0).all(axis=0)] # 用列名筛选DataFrame filtered_df = df[valid_columns]
这个方法和上面的效果完全一致,只是拆分了步骤,更直观。
内容的提问来源于stack exchange,提问作者Nelly Louis
相关产品推荐
相关产品推荐

