Python pandas:基于NaN的切片数据帧

Python pandas:基于NaN的切片数据帧,python,python-2.7,pandas,Python,Python 2.7,Pandas,我有以下数据帧df prod_id prod_ref 10 ef3920 12 bovjhd NaN lkbljb NaN jknnkn 30 kbknkn 我正在尝试以下方法: df[df['prod_id'] != np.nan] 但我得到了完全相同的数据帧 我想展示 prod_id prod_ref 10 ef3920 12 bovjhd 30 kbknkn 我做错了什么?使用函数或反转: 另一种解决方案是,

我有以下数据帧
df

prod_id prod_ref
10      ef3920
12      bovjhd
NaN     lkbljb
NaN     jknnkn
30      kbknkn
我正在尝试以下方法:

df[df['prod_id'] != np.nan]
但我得到了完全相同的数据帧

我想展示

prod_id prod_ref
10      ef3920
12      bovjhd
30      kbknkn
我做错了什么?

使用函数或反转:

另一种解决方案是,但需要指定检查列
NaN

print (df.dropna(subset=['prod_id']))
   prod_id prod_ref
0     10.0   ef3920
1     12.0   bovjhd
4     30.0   kbknkn

如果其他列中的值不是
NaN
值,请使用。

问题在于
np.NaN!=np.nan
True
(或者,
np.nan==np.nan
False
)。Pandas提供了
.dropna()
方法来执行您想要的操作:

df.dropna()
输出:

prod\u id prod\u ref
0 10.0 ef3920
1 12.0 bovjhd
430.0kbKNKNK
默认情况下,
.dropna()
将删除任何列中包含
NaN
的行。可以通过两种方式调整此行为:

  • 使用
    subset
    参数只检查一些列,然后
  • 使用
    how='all'
    ,要求行在所有列中(如果您正在使用
    子集中)包含
    NaN
    ——默认值为
    how='any'

你可以查看。

@gabra-谢谢你的编辑,不幸的是我也编辑了答案,所以社区拒绝了它谢谢你,特别是解释
np.nan!=np.nan
np.nan==np.nan
df.dropna()