在15分钟的时间段内转换每小时的时间段

时间:2014-10-31 11:30:31

标签: pandas

我有一个类似的数据框:

df = pd.read_csv("fileA.csv", dtype=str, delimiter=";", skiprows = None, parse_dates=['Date'])

Date         Buy           Sell

0  01.08.2009   01:00          15              25

1  01.08.2009   02:00          0               30

2  01.08.2009   03:00          10              18

但我需要那个(在15分钟内):

Date         Buy           Sell

0  01.08.2009   01:00          15              25

1  01.08.2009   01:15          15              25

2  01.08.2009   01:30          15              25

3  01.08.2009   01:45          15              25

4  01.08.2009   02:00          0               30

5  01.08.2009   02:15          0               30

6  01.08.2009   02:30          0               30

7  01.08.2009   02:45          0               30

8  01.08.2009   03:00          10              18

....等等。

我尝试过df.resample()。但它不起作用。有人知道一个很好的熊猫方法吗?!

1 个答案:

答案 0 :(得分:3)

如果fileA.csv如下所示:

Date;Buy;Sell
01.08.2009   01:00;15;25
01.08.2009   02:00;0;30
01.08.2009   03:00;10;18

然后你可以用

解析数据
df = pd.read_csv("fileA.csv", delimiter=";", parse_dates=['Date'])

以便df看起来像这样:

In [41]: df
Out[41]: 
                 Date  Buy  Sell
0 2009-01-08 01:00:00   15    25
1 2009-01-08 02:00:00    0    30
2 2009-01-08 03:00:00   10    18

您可能需要检查df.info()以确保使用三列成功将数据解析为DataFrame,并且Date列的dtype为datetime64 [ns]。由于您发布的repr(df)以不同的格式打印日期,并且列标题与数据不对齐,因此很有可能数据尚未正确解析。如果这是真的并且您从csv发布了一些示例行,我们应该可以帮助您将数据解析为DataFrame。

In [51]: df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3 entries, 0 to 2
Data columns (total 3 columns):
Date    3 non-null datetime64[ns]
Buy     3 non-null int64
Sell    3 non-null int64
dtypes: datetime64[ns](1), int64(2)
memory usage: 96.0 bytes

正确解析DataFrame后,可以使用asfreq重新采样到15分钟的时间段,并向前填充缺失值:

In [50]: df.set_index('Date').asfreq('15T', method='ffill')
Out[50]: 
                     Buy  Sell
2009-01-08 01:00:00   15    25
2009-01-08 01:15:00   15    25
2009-01-08 01:30:00   15    25
2009-01-08 01:45:00   15    25
2009-01-08 02:00:00    0    30
2009-01-08 02:15:00    0    30
2009-01-08 02:30:00    0    30
2009-01-08 02:45:00    0    30
2009-01-08 03:00:00   10    18