簡體   English   中英

Pandas替換數據幀時間序列中的值

[英]Pandas replace values in dataframe timeseries

我有一個pandas數據幀df,pandas.tseries.index.DatetimeIndex作為索引。

數據是這樣的:

Time                 Open  High Low   Close Volume
2007-04-01 21:02:00 1.968 2.389 1.968 2.389 18.300000
2007-04-01 21:03:00 157.140 157.140 157.140 157.140 2.400000

....

我想替換一個數據點,讓我們在關閉NaN的列中使用2.389:

In: df["Close"].replace(2.389, np.nan)
Out: 2007-04-01 21:02:00      2.389
     2007-04-01 21:03:00    157.140

替換沒有改變2.389到NaN。 怎么了?

replace可能不適用於浮點數,因為您在DataFrame的repr中看到的浮點表示可能與底層浮點數不同。 例如,實際的Close值可能是:

In [141]: df = pd.DataFrame({'Close': [2.389000000001]})

然而df的repr看起來像:

In [142]: df
Out[142]: 
   Close
0  2.389

因此,不檢查浮點相等性,通常最好檢查接近度:

In [150]: import numpy as np
In [151]: mask = np.isclose(df['Close'], 2.389)

In [152]: mask
Out[152]: array([ True], dtype=bool)

然后,您可以使用布爾掩碼來選擇和更改所需的值:

In [145]: df.loc[mask, 'Close'] = np.nan

In [146]: df
Out[146]: 
   Close
0    NaN

你需要將結果分配給df['Close']或傳遞param inplace=Truedf['Close'].replace(2.389, np.NaN, inplace=True)

例如:

In [5]:

df['Close'] = df['Close'].replace(2.389, np.NaN)
df['Close']
Out[5]:
0      2.389
1    157.140
Name: Close, dtype: float64

大多數大熊貓操作返回副本和一些接收param inplace

查看文檔: http//pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.replace.html#pandas.Series.replace

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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