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

如何在保留首列文本列的同时移除DataFrame中的全零列?

解决方法:保留第一列并移除全零数值列

嘿,这个需求太常见了,尤其是处理大宽表的时候!我给你几个直接能用的pandas方案,完美适配你的场景——保留文本类型的第一列,删掉其他所有全是0的数值列:

方案1:拆分+筛选+合并(直观易懂)

先把第一列单独提出来,再筛选出非全零的数值列,最后合并回去,逻辑清晰,新手也能快速理解:

import pandas as pd

# 提取第一列(文本列)
first_column = DC5_prod.iloc[:, 0]
# 筛选出除第一列外,至少有一个非零值的列
non_zero_numeric_cols = DC5_prod.iloc[:, 1:].loc[:, (DC5_prod.iloc[:, 1:] != 0).any(axis=0)]
# 合并得到清理后的DataFrame
cleaned_DC5 = pd.concat([first_column, non_zero_numeric_cols], axis=1)

这里的核心逻辑是(DC5_prod.iloc[:,1:] != 0).any(axis=0):它会遍历每一列,检查是否存在至少一个非零值,返回的布尔数组刚好可以用来筛选我们需要保留的数值列。

方案2:单步筛选(更简洁)

如果想少写几行代码,也可以直接用布尔掩码一次性筛选所有需要保留的列:

# 构建筛选掩码:要么是第一列,要么是不全为0的数值列
keep_mask = (DC5_prod.columns == DC5_prod.columns[0]) | ~(DC5_prod.iloc[:, 1:] == 0).all(axis=0)
# 直接筛选得到结果
cleaned_DC5 = DC5_prod.loc[:, keep_mask]

这里用~(DC5_prod.iloc[:,1:] ==0).all(axis=0)取反,意思是“不是全为0的列”,再和第一列的条件做或运算,就能精准保留我们要的列。

小提示

如果你的数值列偶尔有非数值类型混入(比如字符串),可以先把它们转成数值类型,避免筛选出错:

# 把除第一列外的列转成数值,无法转换的会变成NaN(你可以根据需求处理NaN)
DC5_prod.iloc[:, 1:] = DC5_prod.iloc[:, 1:].apply(pd.to_numeric, errors='coerce')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:59:54