如何在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
相关产品推荐
相关产品推荐

