在没有NA的情况下替换一列中的值

时间:2017-09-12 08:50:32

标签: python pandas replace

我有一个数据框,我想在一列中替换一些值。 我的专栏:

         col1
0         0.0
1 -89999991.0
2         1.0
3         2.0
4         0.0
5        11.0

我想使用<0 by 0替换col1中的所有值df.loc[df.col1 <0, 'col2'] = 0并将它们写入col2:

   col1
0   0.0
1   0.0
2   1.0
3   2.0
4   0.0
5  11.0

但问题是它取代了所有的NAs值:

  col2
0   NA
1  0.0
2   NA
3   NA
4   NA
5   NA

我不明白问题出在哪里。

2 个答案:

答案 0 :(得分:2)

需要mask替换条件:

df['col2'] = df['col1'].mask(df.col1 <0, 0)

numpy.where

df['col2'] = np.where(df.col1 <0, 0, df['col1'])
print (df)
         col1  col2
0         0.0   0.0
1 -89999991.0   0.0
2         1.0   1.0
3         2.0   2.0
4         0.0   0.0
5        11.0  11.0

clip_lower的另一个解决方案:

df['col2'] = df['col1'].clip_lower(0)
print (df)
         col1  col2
0         0.0   0.0
1 -89999991.0   0.0
2         1.0   1.0
3         2.0   2.0
4         0.0   0.0
5        11.0  11.0

答案 1 :(得分:0)

使用df.apply

df['col2'] = df['col1'].apply(lambda x: max(x,0))
相关问题