如何在python中替换熊猫中的整数值?

时间:2019-02-19 02:27:58

标签: python pandas dataframe replace

我有一个熊猫数据框,如下所示。

   a  b  c  d  e
a  0  1  0  1  1
b  1  0  1  6  3
c  0  1  0  1  2
d  5  1  1  0  8
e  1  3  2  8  0

我想将6 <=5以下的值替换为0。因此我的输出应如下所示。

   a  b  c  d  e
a  0  0  0  0  0
b  0  0  0  6  0
c  0  0  0  0  0
d  0  0  0  0  8
e  0  0  0  8  0

我正尝试使用以下代码来做到这一点。

df['a'].replace([1, 2, 3, 4, 5], 0)
df['b'].replace([1, 2, 3, 4, 5], 0)
df['c'].replace([1, 2, 3, 4, 5], 0)
df['d'].replace([1, 2, 3, 4, 5], 0)
df['e'].replace([1, 2, 3, 4, 5], 0)

但是,我敢肯定,在熊猫中有一种更简单的方法来完成此任务。

很高兴在需要时提供更多详细信息。

2 个答案:

答案 0 :(得分:3)

使用mask

df=df.mask(df<=5,0)
df
Out[380]: 
   a  b  c  d  e
a  0  0  0  0  0
b  0  0  0  6  0
c  0  0  0  0  0
d  0  0  0  0  8
e  0  0  0  8  0

答案 1 :(得分:3)

为了提高性能,我建议使用np.where。您可以使用切片分配(df[:] = ...)将数组分配回原位。

df[:] = np.where(df < 6, 0, df)
df

   a  b  c  d  e
a  0  0  0  0  0
b  0  0  0  6  0
c  0  0  0  0  0
d  0  0  0  0  8
e  0  0  0  8  0

另一个选项涉及fillna

df[df>=6].fillna(0, downcast='infer')

   a  b  c  d  e
a  0  0  0  0  0
b  0  0  0  6  0
c  0  0  0  0  0
d  0  0  0  0  8
e  0  0  0  8  0