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

Python Pandas如何删除指定两列同时为空/Null的行

核心原因

df.dropna(axis=0, how='all', subset=['name', 'toy'])不生效的核心是pandas默认不将空字符串''、全空白字符串等识别为缺失值,只有NaN/pd.NA/None会被dropna判定为空,所以即使两列分别是空字符串和NaN,也不会被判定为同时为空。

解决步骤

第一步:统一替换所有空类值为NaN

先把name、toy两列中你认定为空的类型全部替换为pd.NA,如果你的场景中空值包含空字符串、全空白字符串、None、NaN,用如下代码:

import pandas as pd
# 正则匹配所有全空白/空字符串,替换为pd.NA
df[['name', 'toy']] = df[['name', 'toy']].replace(r'^\s*$', pd.NA, regex=True)

如果还有其他自定义空值(比如'NULL'、'无'等),可以扩展替换规则:

df[['name', 'toy']] = df[['name', 'toy']].replace([r'^\s*$', 'NULL', '无'], pd.NA, regex=True)

第二步:执行删除操作

方案1:使用dropna实现

替换完成后再执行dropna即可生效:

df = df.dropna(axis=0, how='all', subset=['name', 'toy'])

方案2:使用布尔索引(兼容性更高,排查更方便)

如果担心dropna参数配置问题,可以直接写筛选逻辑,可读性更高:

# 仅排除两列同时为空的行,保留其余所有行
df = df[~(df['name'].isna() & df['toy'].isna())]
验证方式

执行完操作后可以用如下代码确认删除结果是否符合预期:

# 统计两列同时为空的行数,正常应该返回0
print(len(df[df['name'].isna() & df['toy'].isna()]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:06:03