2016-04-18 3 views
2

Я пытаюсь объединить две колонок, в третий столбец на основе NaN значенияПанды numpy.where() использовать - Не получая желаемый результат

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

Я получаю только значение, если колонки code1 в code2. Результат пришествии, как показано на выходном изображении изображение

enter image description here

Скажите, пожалуйста, что не так в коде я пишу. Благодаря

ответ

3

Я думаю, что вам нужно isnull для сравнения NaN:

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

Docs:

Предупреждение

Надо иметь в виду, что в Python (и NumPy), то Нан не сравнивают одинаковые, но ничего не делают. Обратите внимание, что Pandas/numpy использует тот факт, что np.nan! = Np.nan и обрабатывает None как np.nan.

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 
+0

Спасибо большое, он работает сейчас :) –

0

Правильный способ проверить, является ли значение нан является использование 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 
Смежные вопросы