2016-09-07 3 views
2

У меня есть dataframeЗаливка 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 

Чтобы использовать эту dataframe, я должен заполнить значения NaN путем (HC или HP) на основе этого условия:

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

Так что заменить NaN от HC, еще HP. я сделал эту функцию:

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(). 

Как я могу это исправить?

ответ

2

использование isin для проверки членства:

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

in не понимает, как оценить массив булевых значений, как это становится неоднозначным, если у вас есть более чем 1 True в массиве, следовательно, ошибки

+0

Спасибо, еще одна ошибка: ТипError: объект 'method' не подлежит подписке – Poisson

+1

Извините отсутствующий '()' вокруг arg, см. Update – EdChum

+0

Хорошо, спасибо, это работает :) – Poisson

Смежные вопросы