Значение NaN панд вызывает проблемы при изменении значений в зависимости от других столбцов - PullRequest
0 голосов
/ 10 октября 2018

почему значения панд NaN иногда печатаются как numpy.float64, а иногда плавают?Это так сбивает с толку, когда я хочу использовать функцию и изменять значения в кадре данных в зависимости от других столбцов

пример:

   A    B    C
0  1  NaN    d
1  2    a    s
2  2    b    s
3  3    c  NaN

У меня есть def для изменения значения столбца C

def change_val(df):
    if df.A==1 and df.B==np.nan:
        return df.C
    else:
        return df.B

Затем я применяю эту функцию к столбцу C

df['C']=df.apply(lambda x: change_val(x),axis=1)

Что-то не так на df.B==np.nan, как мне правильно выразить это, пожалуйста?

Желаемый результат:

   A    B    C
0  1  NaN    d
1  2    a    a
2  2    b    b
3  3    c    c

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018
def change_val(df):
    if df.A==1 and pd.isnull(df.B):
        return df.C
    else:
        return df.B

NaN без значения не будет равно ни одному значению, даже самой Nan, поэтому используйте isnull () / isna ()

0 голосов
/ 10 октября 2018

Используйте numpy.where или loc, для проверки пропущенных значений используется специальная функция Series.isna:

mask = (df.A==1) & (df.B.isna())
#oldier pandas versions
#mask = (df.A==1) & (df.B.isnull())
df['C'] = np.where(mask, df.C, df.B)

Или:

df.loc[~mask, 'C'] = df.B

print (df)
   A    B  C
0  1  NaN  d
1  2    a  a
2  2    b  b
3  3    c  c

Для получения дополнительной информации о работе с отсутствующими данными проверьте docs .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...