numpy其中:对于黑色单元格,将新值放入列中

时间:2018-06-10 13:40:50

标签: python pandas numpy where

我在csv文件中使用numpy。

enter image description here

我有3列。对于'PUMA'列中的500值,我想在'HTYPE'列中放入5。它使用以下代码。但是对于'PUMA'(第3行)列中的黑色单元格(nan),我想在'HTYPE'列中放入'-999'。使用相同的代码,它无法正常工作。

如果使用np.where在另一列中存在nan,如何在列中放置值?

    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 :(得分:1)

需要特殊功能isna来检查NaN的值:

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

另外,可以使用numpy.select

来加倍np.where
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