python 占位符 %z_python-如何用z替换熊猫数据框中的负数

如果所有列都是数字列,则可以使用布尔索引:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'a': [0, -1, 2], 'b': [-3, 2, 1]})

In [3]: df

Out[3]:

a b

0 0 -3

1 -1 2

2 2 1

In [4]: df[df < 0] = 0

In [5]: df

Out[5]:

a b

0 0 0

1 0 2

2 2 1

对于更一般的情况,此答案显示了私有方法timedelta:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'a': [0, -1, 2], 'b': [-3, 2, 1],

'c': ['foo', 'goo', 'bar']})

In [3]: df

Out[3]:

a b c

0 0 -3 foo

1 -1 2 goo

2 2 1 bar

In [4]: num = df._get_numeric_data()

In [5]: num[num < 0] = 0

In [6]: df

Out[6]:

a b c

0 0 0 foo

1 0 2 goo

2 2 1 bar

对于timedelta类型,布尔索引似乎适用于单独的列,但不适用于整个数据框。 因此,您可以执行以下操作:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'a': pd.to_timedelta([0, -1, 2], 'd'),

...: 'b': pd.to_timedelta([-3, 2, 1], 'd')})

In [3]: df

Out[3]:

a b

0 0 days -3 days

1 -1 days 2 days

2 2 days 1 days

In [4]: for k, v in df.iteritems():

...: v[v < 0] = 0

...:

In [5]: df

Out[5]:

a b

0 0 days 0 days

1 0 days 2 days

2 2 days 1 days

更新:与pd.Timedelta的比较适用于整个DataFrame:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({'a': pd.to_timedelta([0, -1, 2], 'd'),

...: 'b': pd.to_timedelta([-3, 2, 1], 'd')})

In [3]: df[df < pd.Timedelta(0)] = 0

In [4]: df

Out[4]:

a b

0 0 days 0 days

1 0 days 2 days

2 2 days 1 days

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值