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

如何在Pandas中移除指定列含NaN/None或空列表的行?

解决Pandas移除指定列全为NaN/None/空列表的行的问题

原始数据

首先定义目标DataFrame:

import pandas as pd

df = pd.DataFrame({'animal': ['Falcon', 'Falcon',
                          'Parrot', 'Parrot'],
                'speed': [380., 370., 24., None],
                'height': [380., 370., [], None],
                'weight': [380., 370., None, None]})

对应的表格输出:

animalspeedheightweight
0Falcon380.0380.0380.0
1Falcon370.0370.0370.0
2Parrot24.0[]NaN
3ParrotNaNNoneNaN

需求

移除height和weight列中**所有值均为NaN/None或空列表[]**的行。

原有方法的局限

使用dropna只能识别NaN/None,无法处理空列表,执行以下代码后,第2行(含空列表)会被保留:

cols = ['height','weight']
df2 = df.dropna(axis=0, how='all', subset=cols)

得到的结果:

animalspeedheightweight
0Falcon380.0380.0380.0
1Falcon370.0370.0370.0
2Parrot24.0[]NaN

解决办法

方法一:自定义空值判断(通用型)

先定义函数识别所有空值类型(NaN/None/空列表),再标记出指定列全为空的行,最后过滤:

cols = ['height','weight']

# 判断值是否为需要处理的空值
def is_empty(val):
    return pd.isna(val) or (isinstance(val, list) and len(val) == 0)

# 生成掩码:指定列全为空的行标记为True
mask = df[cols].applymap(is_empty).all(axis=1)

# 保留非全空的行
df_result = df[~mask]

方法二:转换空列表为缺失值(高效型)

将空列表统一转为Pandas缺失值pd.NA,再复用dropna逻辑,适合大数据量场景:

cols = ['height','weight']

# 遍历指定列,把空列表替换为pd.NA
for col in cols:
    df[col] = df[col].apply(lambda x: pd.NA if isinstance(x, list) and len(x) == 0 else x)

# 移除指定列全为缺失值的行
df_result = df.dropna(axis=0, how='all', subset=cols)

两种方法最终得到的结果一致:

animalspeedheightweight
0Falcon380.0380.0380.0
1Falcon370.0370.0370.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:23:35