在方法链

时间:2018-01-18 01:51:20

标签: python pandas

我想用np.nan替换列'b'

中的所有否定号码
  • 在df上使用方法
  • 不到位。

以下是示例框架:

pd.DataFrame({'a': [1, 2] , 'b': [-3, 4], 'c': [5, -6]})

有关就地和非方法的解决方案,请参阅this question

2 个答案:

答案 0 :(得分:3)

如果assign计为df的方法,则可以重新计算列b并将其分配给df以替换旧列:

df = pd.DataFrame({'a': [1, 2] , 'b': [-3, 4], 'c': [5, -6]})

df.assign(b = df.b.where(df.b.ge(0)))
#   a    b  c
#0  1  NaN  5
#1  2  4.0 -6

为了获得更好的链接行为,您可以将lambda功能与assign

一起使用
df.assign(b = lambda x: x.b.where(x.b.ge(0)))

答案 1 :(得分:2)

您可以使用 loc 函数。替换所有负值并利用numpy nan替换它们。 示例代码看起来像。

import numpy as np
df=pd.DataFrame({'a': [1, 2] , 'b': [-3, 4], 'c': [5, -6]})
df.loc[~(df['b'] > 0), 'b']=np.nan