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

时间:2013-12-08 22:08:26

标签: pandas

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

当使用带有method ='ffill'的reindex时,不会有人希望以下代码在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')

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

daily2 = daily1.fillna(method='ffill')

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

1 个答案:

答案 0 :(得分: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

我希望将所有的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

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

这与

完全不同
df.reindex( [2, 4, 6], method=None )

产生

    A   B   C
2 NaN NaN NaN
4 NaN NaN NaN
6 NaN NaN NaN

以下是一个例子:

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

在重新索引数据帧时,转发flll意味着只取任何值(nan或not nan)并填充直到下一个可用索引。 “nan”值可能只是一个实际有效的观察值,您希望保持原样。

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