2014-10-31 121 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 
相關問題