2014-10-31 143 views
1

我有一个这样的数据帧:转换小时的时间在15分钟的时间内

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()。但它不起作用。有人知道一个很好的熊猫方法吗?!

+0

'resample'是确实是你所需要的功能,但是因此您需要将日期设置为索引:'df.set_index('Date')'。但是,这些日期看起来并不像他们真的被解析为日期。 – joris 2014-10-31 12:09:28

回答

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()以确保您成功地将数据解析到DataF中与三列,并且日期列有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 

一旦数据帧正确分析,重采样到15分钟计时周期可以用asfreq做具有超前填充缺失值:

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