如何在DataFrame中按条件删除整列均为「o」的列
实现方案
思路说明
- 优先筛选首行值为
"o"的列作为候选校验列,降低全表校验的计算量 - 对候选列逐列校验是否所有值均为
"o",确认后删除对应列
Python(Pandas)实现
优化版(优先校验首行,适合大表)
import pandas as pd def drop_all_o_cols(df): # 筛选首行值为"o"的候选列 candidate_cols = df.columns[df.iloc[0] == "o"] # 校验候选列是否全列都是"o" drop_cols = [col for col in candidate_cols if (df[col] == "o").all()] # 删除目标列 return df.drop(columns=drop_cols) # 批量处理多张数据表示例 df_list = [df1, df2, df3] # 替换为你自己的DataFrame列表 processed_df_list = [drop_all_o_cols(df) for df in df_list]
简化版(适合小表,直接全列校验)
# 直接删除所有全列为"o"的列 df = df.drop(columns=[col for col in df.columns if (df[col] == "o").all()])
注意:如果列中存在缺失值,
all()默认会返回False,若需要把仅含缺失值和"o"的列也同步删除,可将判断条件改为(df[col] == "o").all(skipna=True)
R实现
library(dplyr) drop_all_o_cols <- function(df) { # 筛选首行值为"o"的候选列 candidate_cols <- names(df)[which(df[1,] == "o")] # 校验候选列是否全列都是"o" drop_cols <- candidate_cols[sapply(df[candidate_cols], function(x) all(x == "o"))] # 删除目标列 return(df %>% select(-all_of(drop_cols))) } # 批量处理多张数据表示例 df_list <- list(df1, df2, df3) # 替换为你自己的DataFrame列表 processed_df_list <- lapply(df_list, drop_all_o_cols)
注意:如果列中存在缺失值,可将判断条件改为
all(x == "o", na.rm = TRUE)即可匹配仅含缺失值和"o"的列
内容的提问来源于stack exchange,提问作者Carolina
相关产品推荐
相关产品推荐

