Python 按nan值筛选numpy数组的dataframe列
我有一个熊猫数据框Python 按nan值筛选numpy数组的dataframe列,python,pandas,numpy,Python,Pandas,Numpy,我有一个熊猫数据框 ID Unique_Countries 0 123 [Japan] 1 124 [nan] 2 125 [US,Brazil] . . . 我通过汇总每个ID组的多个唯一国家来获得“唯一国家”列。在原始国家/地区列中有许多ID只有“NaN”值。它们现在显示为您在第1行中看到的内容。我想过滤这些,但似乎不能。我打字的时候 df.独特国家[1] 我明白了 array([nan],dtype=object) 我试过几种方法,包括
ID Unique_Countries
0 123 [Japan]
1 124 [nan]
2 125 [US,Brazil]
.
.
.
我通过汇总每个ID组的多个唯一国家来获得“唯一国家”列。在原始国家/地区列中有许多ID只有“NaN”值。它们现在显示为您在第1行中看到的内容。我想过滤这些,但似乎不能。我打字的时候
df.独特国家[1]
我明白了
array([nan],dtype=object)
我试过几种方法,包括
isnull()
和
isnan()
但由于它是一个numpy数组,所以会出现混乱。如果您的单元格的
NaN
不在第一位,请尝试使用explode
和groupby.all
df[df.Unique_Countries.explode().notna().groupby(level=0).all()]
或
让我们试试看
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,或者您是否想知道在“唯一国家”列中包含nan的记录的ID,您可以使用类似的方法:
long_ss = df.set_index('ID').squeeze().explode()
long_ss[long_ss.isna()]
让我们试试
df.Unique\u Countries.str.contains('nan')
@wwnde它只是在每一行旁边列出一个nan
。如果我尝试.contains('US')
而不是.contains('nan')
的话,我也会这样做。我不太明白您需要什么。我认为你所需要的只是从你最初的手术结果中进行选择。如果您需要放弃并继续使用那些不是nan
,请尝试df[~df.Unique\u Countries.str.contains('nan')]
,我认为这也不是问题。你的回答每行都是错的。我说我不认为它是字符串,因为当我键入df.unique\u countries[0]
时,它会给我array(['US',dtype=object)
在我们周围有引号的地方,你能分享这个命令的输出吗:type(df.unique\u countries[1][0])
我想我们已经取得了进展。它说这是一个花车做的把戏!我想这只是一种奇怪的NaN类型-非常感谢!快速等待-此答案仅在nan是数组的第一个值时有效。如果不是第一次的话,有什么我可以补充的吗?i、 e.[澳大利亚,南部]
long_ss = df.set_index('ID').squeeze().explode()
long_ss[long_ss.isna()]