当重新索引,例如,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实际上做的填充方法是什么。我只是从熊猫文档中不清楚。在我看来,我不应该做上述这一行。
答案 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”值可能只是一个实际有效的观察值,您希望保持原样。
重新索引不应对数据强制执行强制性补充。