按nan值筛选numpy数组的pandas数据帧列



我有一个Panda DataFrame

ID    Unique_Countries
0   123     [Japan]
1   124      [nan]
2   125    [US,Brazil]
.
.
.

我通过汇总每个ID组中的唯一国家获得了Unique_Countries列。在原始国家/地区列中有许多ID只有"NaN"值。它们现在显示为您在第1行中看到的内容。我想过滤这些,但似乎无法。当我键入时

df.Unique_Countries[1]

我得到

array([nan], dtype=object)

我试过几种方法,包括

isnull()isnan()

但它会被搞砸,因为它是一个numpy数组。

如果您的单元格的NaN不在第一位,请尝试使用explodegroupby.all

df[df.Unique_Countries.explode().notna().groupby(level=0).all()]

df[df.Unique_Countries.explode().notna().all(level=0)]

让我们试试

df.Unique_Countries.str[0].isna()  #'nan' is True
df.Unique_Countries.str[0].notna()  #'nan' is False

要只选择非nan字符串,只需使用上方的掩码

df[df.Unique_Countries.str[0].notna()]

我相信,如果一个国家包含子字符串nan,基于字符串方法contains的答案将失败。

在我看来,解决方案应该是:

df.explode('Unique_Countries').dropna().groupby('ID', as_index=False).agg(list)

此代码将nan从数据帧中删除,并以原始形式返回数据集

从你的问题中,我不确定你是想删除na,还是想知道Unique_Countries列中有nan的记录的ID,你可以使用类似的东西:

long_ss = df.set_index('ID').squeeze().explode()
long_ss[long_ss.isna()]

相关内容

最新更新