2016-05-19 2 views
0

Можно ли заменить значения в панд DataFrame на основе логики, которая определяет, является ли значение является выше или ниже определенного порога с N/A? `Замена значений в панд Столбцы

import pandas as pd 

df = pd.DataFrame({'date': pd.date_range(start='2015-12-31', 
             periods=13, 
             freq='M'), 
       'val': [1, 10, 25, -1000, 45, 66, 99, 88,128, 256,512,1024, 2048]}).set_index('date') 

Так что я бы хотел бы заменить любое значение> абс 10 с N/A

+0

Извините, вы просите только заменить значения, не равные 10? – EdChum

+0

Заменить значения ** больше или меньше ** чем 10 не равно будет '! = 10' – toasteez

+0

Так мой обновленный ответ правильный? – EdChum

ответ

1

вы можете создать булеву маску, чтобы установить только те строки, которые удовлетворяют условие булева, дополнительно можно использовать abs, чтобы проверить, если значение +/- 10:

In [107]:  
df.loc[df['val'].abs() > 10, 'val' ] = np.NaN 
df 

Out[107]: 
      val 
date    
2015-12-31 1.0 
2016-01-31 10.0 
2016-02-29 NaN 
2016-03-31 NaN 
2016-04-30 NaN 
2016-05-31 NaN 
2016-06-30 NaN 
2016-07-31 NaN 
2016-08-31 NaN 
2016-09-30 NaN 
2016-10-31 NaN 
2016-11-30 NaN 
2016-12-31 NaN 
+0

Мне кажется, что @toasteez означает «не равный» не «менее 10 и больше 10». Специальный синтаксис :) – knagaev

+0

@knagaev '! =' Is ** Not Equal ** и '<>' is ** больше или меньше **. – toasteez

+0

Можете ли вы объяснить, в чем разница, поскольку я не вижу, как вы не получили бы тот же результат, используя '! =' Здесь? – EdChum