将datetimeindex扩展到以前的熊猫时间

时间:2019-12-23 06:29:50

标签: python pandas

MRE:

idx = pd.date_range('2015-07-03 08:00:00', periods=30, 

freq='H')
data = np.random.randint(1, 100, size=len(idx))
df = pd.DataFrame({'index':idx, 'col':data})

df.set_index("index", inplace=True)

如下所示:

                    col
index   
2015-07-03 08:00:00 96
2015-07-03 09:00:00 79
2015-07-03 10:00:00 15
2015-07-03 11:00:00 2
2015-07-03 12:00:00 84
2015-07-03 13:00:00 86
2015-07-03 14:00:00 5
.
.
.

请注意,数据框包含多天。由于频率是以小时为单位,因此从07/03 08:00:00开始,它将包含每小时的日期。

我想从05:00:00(包括第07/03天)获取所有数据,即使该数据在“ col”列中的值为0。

我想向后扩展,所以它从05:00:00开始。

不,我只是不能从05:00:00开始,因为我已经具有从08:00:00开始的数据帧。我试图使所有内容保持不变,但在开头添加3行,以包括05:00:00、06:00:00和07:00:00

2 个答案:

答案 0 :(得分:2)

reindex方法可方便地更改索引值:

idx = pd.date_range('2015-07-03 08:00:00', periods=30, freq='H')
data = np.random.randint(1, 100, size=len(idx))

# use the index param to set index or you might lose the freq 
df = pd.DataFrame({'col':data}, index=idx)

# reindex with a new index
start = df.tshift(-3).index[0]
end = df.index[-1]
new_index = pd.date_range(start, end, freq='H')
new_df = df.reindex(new_index)

resample对于日期索引也非常有用

答案 1 :(得分:0)

只需将代码中的时间从08:00:00更改为05:00:00,然后再创建3行并将此数据帧更新为现有数据帧即可。

idx1 = pd.date_range('2015-07-03 05:00:00', periods=3,freq='H')

df1 = pd.DataFrame({'index': idx1 ,'col':np.random.randint(1,100,size = 3)})
df1.set_index('index',inplace=True)
df = df1.append(df)
print(df)

将此代码段添加到您的代码...