熊猫重新采样并填充末尾的NaN

时间:2019-01-29 10:10:20

标签: python pandas missing-data resampling

我想通过向前填充结果来对每周到每天的频率序列进行上采样。

如果我对原始序列的最后一次观察是font-weight: 900;,则我希望此值将被以前的有效值代替,但仍保留为NaN

设置

NaN

结果

import numpy as np
import pandas as pd

all_dates = pd.date_range(start='2018-01-01', freq='W-WED', periods=4)

ts = pd.Series([1, 2, 3], index=all_dates[:3])
ts[all_dates[3]] = np.nan

ts
Out[16]: 
2018-01-03    1.0
2018-01-10    2.0
2018-01-17    3.0
2018-01-24    NaN
Freq: W-WED, dtype: float64

虽然我期望最后一个值也是3。

有人对此行为有一个解释吗?

2 个答案:

答案 0 :(得分:1)

重新采样和ffill的目的只是从一周的第一天开始向前传播-如果一周的第一天是NaN,那就可以向前填充。例如:

ts.iloc[1] = np.nan
ts.resample('B').ffill()

2018-01-03    1.0
2018-01-04    1.0
2018-01-05    1.0
2018-01-08    1.0
2018-01-09    1.0
2018-01-10    NaN
2018-01-11    NaN
2018-01-12    NaN
2018-01-15    NaN
2018-01-16    NaN
2018-01-17    3.0
2018-01-18    3.0
2018-01-19    3.0
2018-01-22    3.0
2018-01-23    3.0
2018-01-24    NaN
Freq: B, dtype: float64

在大多数情况下, 是从前一周的数据进行传播所不希望的。如果您想在原始(每周)系列中的值缺失的情况下使用前几周的数据,则只需在fillna上加上ffill就可以了。

答案 1 :(得分:0)

resample()返回DatetimeIndexResampler

您需要归还大熊猫Series

在填充asfreq() https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.asfreq.html之前,您可以使用Nan方法进行操作。

所以,这应该起作用:

ts.resample('B').asfreq().ffill()