填写NaN值 [英] Fill NaN values

查看:62
本文介绍了填写NaN值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据框

TIMESTAMP P_ACT_KW PERIODE_TARIF P_SOUSCR
2016-01-01 00:00:00 116 HC 250
2016-01-01 00:10:00 121 HC 250
2016-01-01 00:20:00 121 NaN 250

要使用此数据框,我必须根据以下条件用(HC或HP)填充NaN值:

To use this dataframe, I must to fill the NaN values by (HC or HP) based on this condition:

If (hour extracted from TIMESTAMP is in {0,1,2, 3, 4, 5, 22, 23}

所以我用HC代替NaN, 否则惠普. 我做了这个功能:

So I replace NaN by HC, else by HP. I did this function:

def prep_data(data):
    data['PERIODE_TARIF']=np.where(data['PERIODE_TARIF']in (0, 1,2, 3, 4, 5, 22, 23),'HC','HP')
    return data

但是我得到这个错误:

 ValueError                                Traceback (most recent call last)
 <ipython-input-23-c1fb7e3d7b82> in <module>()
 ----> 1 prep_data(df_energy2)

 <ipython-input-22-04bd325f91cd> in prep_data(data)
       1 # Nettoyage des données
       2 def prep_data(data):
 ----> 3     data['PERIODE_TARIF']=np.where(data['PERIODE_TARIF']in (0, 1),'HC','HP')
       4     return data

 C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\generic.py
 in __nonzero__(self)
     890         raise ValueError("The truth value of a {0} is ambiguous. "
     891                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
 --> 892                          .format(self.__class__.__name__))
     893 
     894     __bool__ = __nonzero__

 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我该如何解决?

推荐答案

使用 isin 以测试成员资格:

use isin to test for membership:

data['PERIODE_TARIF']=np.where(data['PERIODE_TARIF'].isin([0, 1,2, 3, 4, 5, 22, 23]),'HC','HP')

in不了解如何评估布尔值数组,因为如果数组中的True个以上,则该数组会变得模棱两可,因此会出现错误

in doesn't understand how to evaluate an array of boolean values as it becomes ambiguous if you have more than 1 True in the array hence the error

这篇关于填写NaN值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆