[英]Replace negative values in single DataFrame column
如果我有以下數據幀:
>>> 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
我認為你可以使用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
()假設不同的列應該填充會有不同的值)
df_1.mask(df_1.lt(0)).fillna({'A':9999,'B':0,'C':-9999})
Out[1440]:
A B C
2017-01-01 00:01:00 9999.0 4.0 7.0
2017-01-01 00:02:00 2.0 0.0 8.0
2017-01-02 00:01:00 3.0 6.0 -9999.0
您可以為此使用 numpy.where。 將以下內容添加到您的代碼中以更改 B 列的值,例如:
df_1.B = np.where(df_1.B < 0, 0, df_1.B)
print(df_1)
如果要將 B 列中的值替換為 0:
df_1.loc[df_1['B']<0,'B']=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
另一種方式,與@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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.