python - 使用 numpy where : for black cell, 将新值放入列中

标签 python pandas numpy where-clause

我正在 csv 文件中使用 numpy。

enter image description here

我有 3 列。对于“PUMA”列中的 500 个值,我想将 5 放入“HTYPE”列中。它与以下代码一起使用。但对于“PUMA”列(第 3 行)中的黑色单元格(nan),我想将“-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)

最佳答案

需要特殊功能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

关于python - 使用 numpy where : for black cell, 将新值放入列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50784284/

相关文章:

python - 如何在 numpy 中制作棋盘格?

python - xgboost 的并行线程?

python - 使用 Celery 成功执行一个函数后运行另一个任务

python - Pandas 使用 Numpy 作为随机数生成器吗?

python - 如何使用 Pandas 用那天的 temperature_min 和 temperature_max 填充一天的剩余时间?

numpy - 在NumPy中使用FFT时的频率单位

python - 属性错误 : exp in python, 适用于某些功能而不适用于其他功能

python - Django 从apache 获取环境变量

python-3.x - 使用 seaborn 对数据进行分组后的条形图

python - 在Python中标准化点积等于1的向量?