簡體   English   中英

替換單個 DataFrame 列中的負值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM