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

如何在Pandas数据框中删除某列含NaN数组的行

解决DataFrame中数组内包含NaN时无法删除对应行的问题

你的问题出在b列的“NaN”并非pandas默认识别的标量NaN,而是包含NaN值的数组对象,所以dropna()和isnull()这类方法无法检测到它们。以下是两种可行的解决方法:

方法一:直接检查数组内是否包含NaN

通过apply遍历b列的每个数组,用numpy判断数组中是否存在NaN,再过滤行:

import numpy as np
import pandas as pd

# 你的原始数据
t = np.array([[1, np.array(np.nan)],
              [1, np.array(np.nan)],
              [1, np.array(np.nan)],
              [1, np.array(np.nan)],
              [2, np.array([4, 5, 6])]], dtype=object)
df = pd.DataFrame(t, columns=['a','b'])

# 过滤数组含NaN的行
df_filtered = df[~df['b'].apply(lambda x: np.isnan(x).any())]
print(df_filtered)

输出结果:

a          b
4   2  [4, 5, 6]

方法二:将单元素数组转为标量(适用于你的场景)

你的前四行b列都是单元素NaN数组,可以先把它们转为标量NaN,再用常规的dropna():

# 将单元素数组提取为标量,多元素数组保留原样
df['b'] = df['b'].apply(lambda x: x.item() if x.size == 1 else x)
# 此时可正常删除含NaN的行
df_filtered = df.dropna(subset=['b'])
print(df_filtered)

同样能得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:02:06