替换单个DataFrame列中的负值

时间:2018-04-05 20:54:42

标签: python pandas

如果我有以下DataFrame:

>>> df_1 = pd.DataFrame({'A':[-1, 2,  3],
                         'B':[4, -5,  6],
                         'C':[7,  8, -9]}, 
                          index=pd.to_datetime(['2017-01-01 00:01:00', '2017-01-01 00:02:00', '2017-01-02 00:01:00']))

>>> df_1
                      A   B   C
2017-01-01 00:01:00  -1   4   7
2017-01-01 00:02:00   2  -5   8
2017-01-02 00:01:00   3   6  -9

如何用其他内容替换特定列中的所有负值?例如,如果我想替换“B”列中的所有负值,但是没有其他值,例如0,则以下将是我的结果。

>>> df_2
                      A   B   C
2017-01-01 00:01:00  -1   4   7
2017-01-01 00:02:00   2   0   8
2017-01-02 00:01:00   3   6  -9

4 个答案:

答案 0 :(得分:2)

我认为您可以使用\

mask

如果我们结合df_1.B=df_1.B.mask(df_1.B.lt(0),0) df_1 Out[1437]: A B C 2017-01-01 00:01:00 -1 4 7 2017-01-01 00:02:00 2 0 8 2017-01-02 00:01:00 3 6 -9 ()假设不同的列应该填充不同的值)

fillna

答案 1 :(得分:1)

你可以使用numpy.where。将以下内容添加到代码中以更改B列的值,例如:

df_1.B = np.where(df_1.B < 0, 0,df_1.B)

print(df_1)

答案 2 :(得分:0)

正常条件适合您:

df_1[df_1['B'] < 0] = 0


                     A  B   C
2017-01-01 00:01:00 -1  4   7
2017-01-01 00:02:00  2  0   8
2017-01-02 00:01:00  3  6   -9

答案 3 :(得分:0)

另一种方式,与@bhansa的答案非常相似,但使用pandas.Series.lt

df_1.B[df_1.B.lt(0)] = 0

>>> df_1
                     A  B  C
2017-01-01 00:01:00 -1  4  7
2017-01-01 00:02:00  2  0  8
2017-01-02 00:01:00  3  6 -9