重建索引时填充方法的功能是什么?

use*_*915 5 pandas

例如,将1分钟数据重新索引到每日数据(例如16:00的每日价格索引),如果某一天的16:00时间戳没有1分钟数据的情况,我们希望从最后一个非空1min数据转发填充.在下面的例子中,13日16:00之前没有1min数据,最后1min数据来自10日.

当使用带有method ='ffill'的reindex时,不会期望下面的代码在16:00在16:00填写值吗?检查daily1表明它缺失了.

import pandas as pd
import numpy as np

hf_index = pd.date_range(start='2013-05-09 9:00', end='2013-05-13 23:59', freq='1min')
hf_prices = np.random.rand(len(hf_index))
hf = pd.DataFrame(hf_prices, index=hf_index)
hf.ix['2013-05-10 18:00':'2013-05-13 18:00',:]=np.nan
hf.plot()

ind_daily = pd.date_range(start='2013-05-09 16:00', end='2013-05-13 16:00', freq='B')

print(ind_daily.values)
daily1 = hf.reindex(index=ind_daily, method='ffill')
Run Code Online (Sandbox Code Playgroud)

要填写为一个(或者更确切地说是我)期望,我需要这样做:

daily2 = daily1.fillna(method='ffill')
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,reindex实际上做的填充方法是什么.我只是从熊猫文档中不清楚.在我看来,我不应该做上述这一行.

beh*_*uri 1

我也在 github 上写下了我的评论:

我认为目前的行为更有意义。在某些情况下,“nan”值可以是有效的“实际”值。由于索引的变化,实际“nan”值的概念应该与“nan”值不同。如果我有一个像这样的数据框:

       A      B      C
1  1.242    NaN  0.110
3    NaN -0.185 -0.209
5 -0.581  1.483    NaN
Run Code Online (Sandbox Code Playgroud)

我想将所有 nan 保留为 nan,这样更有意义:

 df.reindex( [2, 4, 6], method='ffill' )
        A      B      C
2  1.242    NaN  0.110
4    NaN -0.185 -0.209
6 -0.581  1.483    NaN
Run Code Online (Sandbox Code Playgroud)

只需取任何值(nan 或非nan)并向前填充,直到下一个可用索引重新索引不应对数据强制执行强制填充。

这与

df.reindex( [2, 4, 6], method=None )
Run Code Online (Sandbox Code Playgroud)

产生

    A   B   C
2 NaN NaN NaN
4 NaN NaN NaN
6 NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

np.nan只能表示不适用;假设我有每小时的数据,而在周末,一些计算是不适用的。我将nan在周末填写这些专栏。现在,如果我reindex要更精细的索引,比如说每分钟,重新索引将选择周五的最后一个值,并在整个周末填写它。这是错误的。

在重新索引数据帧时,前向填充意味着只取任何值( nan 或不是 nan )并向前填充直到下一个可用索引。“nan”值可以只是您想要保持原样的实际有效观察值。

重新索引不应对数据强制执行强制填充。