Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按nan值筛选numpy数组的dataframe列_Python_Pandas_Numpy - Fatal编程技术网

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()]