Pandas创建新列:判断行内其余值是否均为空字符串
解决方案:给Pandas DataFrame添加判断全空行的新列
没问题,我来帮你搞定这个需求!核心思路是先把所有仅包含空白字符的字符串(比如' ')转换成等效的空状态,再判断每行是否所有列都满足“空”的条件。
基础实现(仅字符串列)
如果你的DataFrame所有列都是字符串类型,用下面的方法最直接高效:
步骤1:创建示例DataFrame
import pandas as pd d = {'col1': ['', '2', ' '], 'col2': ['', 'alpha', ' ']} df = pd.DataFrame(data=d)
步骤2:添加新列
这里有两种简洁的写法,任选其一即可:
写法一:先统一处理空白字符串,再判断全空
# 先把所有单元格去掉前后空格,将空字符串转为缺失值pd.NA trimmed_df = df.apply(lambda col: col.str.strip().replace('', pd.NA)) # 检查每行是否所有列都是缺失值 df['new_column'] = trimmed_df.isna().all(axis=1)
写法二:逐行检查每个单元格
# 对每行的每个单元格,去掉空格后判断是否为空,用all()确认所有单元格都满足空条件 df['new_column'] = df.apply(lambda row: all(cell.strip() == '' for cell in row), axis=1)
运行结果
执行后你的DataFrame会变成:
col1 col2 new_column 0 "" True 1 2 alpha False 2 " " " " True
进阶兼容:包含非字符串列的情况
如果你的DataFrame里有数字、布尔值等非字符串列,上面的方法会报错(因为非字符串类型没有strip()方法)。这时候可以写一个自定义函数来兼容所有列类型:
def is_all_empty(row): for cell in row: # 字符串类型:检查去掉空格后是否为空 if isinstance(cell, str): if cell.strip() != '': return False # 非字符串类型:只要不是缺失值,就不算空 else: if pd.notna(cell): return False return True df['new_column'] = df.apply(is_all_empty, axis=1)
这个函数会自动区分单元格类型:非空的数字、布尔值等会被识别为“非空”,而空白字符串、空字符串都会被判定为“空”,完美适配混合类型的DataFrame。
内容的提问来源于stack exchange,提问作者mayankmehtani
相关产品推荐
相关产品推荐

