с NumPy где: для черной ячейки, поместив новое значение в столбце - PullRequest
0 голосов
/ 10 июня 2018

Я работаю с Numpy в CSV-файле.

enter image description here

У меня есть 3 столбца.Для значения 500 в столбце «PUMA» я хотел поставить 5 в столбце «HTYPE».Это работало со следующим кодом.Но для черной клетки (nan) в столбце «PUMA» (3-й ряд) я хотел поставить «-999» в столбце «HTYPE».С тем же кодом он не работает.

Как поместить значение в столбец, если в другом столбце есть nan, используя np.where?

    import pandas as pd, numpy as np
    df= pd.read_csv(input_folder + input_file )

    df['HTYPE'] = np.where(df['PUMA']==500, 5, df['HTYPE'] )
    df['HTYPE'] = np.where(df['PUMA']==np.NaN, -999, df['HTYPE'] )

    df.to_csv('output.csv', index=False)

1 Ответ

0 голосов
/ 10 июня 2018

Нужна специальная функция isna для проверки NaN s значения:

df['HTYPE'] = np.where(df['PUMA'].isna(), -999, df['HTYPE'] )
#for oldier versions of pandas
#df['HTYPE'] = np.where(df['PUMA'].isnull(), -999, df['HTYPE'] )

, потому что design :

np.nan == np.nan
False

Также вместо двойного np.where возможно использование numpy.select:

df = pd.DataFrame({'PUMA':[500,3302, np.nan, 9503],
                   'WGTP':[21,0,6,6],
                   'HTYPE':[20,0,0,0]})
print (df)
     PUMA  WGTP  HTYPE
0   500.0    21     20
1  3302.0     0      0
2     NaN     6      0
3  9503.0     6      0

df['HTYPE'] = np.select([df['PUMA']==500, df['PUMA'].isna()], 
                        [5, -999], 
                        default=df['HTYPE'] )
print (df)
     PUMA  WGTP  HTYPE
0   500.0    21      5
1  3302.0     0      0
2     NaN     6   -999
3  9503.0     6      0
...