用 Pandas 替换列中的值

3

是否可以根据逻辑确定一列数据在某个阈值之上或之下,然后用N/A替换pandas DataFrame中的值?

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。


抱歉,您是在询问是否只替换不等于10的值吗? - EdChum
替换大于或小于10的值,不等于将是!= 10 - ctrl-alt-delete
我的更新答案是正确的吗? - EdChum
你的第一个答案是正确的。使用abs()函数 - ctrl-alt-delete
在我还没来得及点赞之前,它就被修改了。 - ctrl-alt-delete
1个回答

4
你可以创建一个布尔掩码来设置符合布尔条件的行,此外你还可以使用 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

我觉得@toasteez的意思是“不等于”,而不是“小于10且大于10”。这是一种特殊的语法 :) - knagaev
@knagaev != 表示不等于,而 <> 表示大于或小于 - ctrl-alt-delete
你能解释一下这里的区别吗?因为我不明白为什么在这里使用"!="不会得到相同的结果。 - EdChum
我想要的是在数字范围-10到+10之间的所有值。 - ctrl-alt-delete
你的问题不够清晰,应该发布所需结果是什么。 - EdChum
@EdChum,我很高兴一切都澄清了 :) - knagaev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接