如果我有以下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
答案 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