Pandas numpy.where()使用 - 没有得到想要的结果

时间:2016-04-18 05:20:26

标签: python numpy pandas

我正在尝试根据NaN值将两列合并到第三列

df['code2'] = np.where(df['code']==np.nan, df['code'], df['code1'])

如果code2中的code1列,我只获取值。结果如图所示 输出图像

enter image description here

请告诉我我写的代码有什么问题。感谢

2 个答案:

答案 0 :(得分:3)

我认为您需要isnull来比较NaN

df['code2'] = np.where(df['code'].isnull(), df['code'], df['code1'])

Docs

  

警告

     

必须注意的是,在python(和numpy)中,nan并不比较平等,但是没有。请注意,Pandas / numpy使用np.nan!= np.nan的事实,并像np.nan一样对待None。

In [11]: None == None
Out[11]: True

In [12]: np.nan == np.nan
Out[12]: False
  

因此,与上述相比,标量相等比较与None / np.nan无法提供有用的信息。

In [13]: df2['one'] == np.nan
Out[13]: 
a    False
b    False
c    False
d    False
e    False
f    False
g    False
h    False
Name: one, dtype: bool

答案 1 :(得分:0)

检查值是否为nan的正确方法是使用np.isnan(val)

np.nan == np.nan
False

np.isnan(np.nan)
True
df = pd.DataFrame({'a': [np.nan, 1, 2]})

>>> np.isnan(df.a)
0     True
1    False
2    False
Name: a, dtype: bool