2014-09-21 60 views
1

我有一個數據幀,P,格式:熊貓轉換分鐘數索引(0到1440),以日期時間

   0    1    2 
0 10088.245329 9905.462496 12328.830197 
1 10092.783624 9688.034026 11785.442316 
2 10312.043154 9501.677065 11784.126068 
3 10314.919339 9694.886693 11419.465596 
... 
1438 9636.005396 9544.771643 14181.272599 
1439 9414.292352 9312.184926 13988.822708 

索引表示一天的分鐘。

我想重新格式化爲datatime對象,以便我可以將數據轉換爲半小時的數據。

我一直在玩的to_datetime功能做到這一點:

P.index=pd.to_datetime(P.index,format='%M') 

這個工程得到分鐘,但不正確的小時:

<class 'pandas.tseries.index.DatetimeIndex'> 
[1900-01-01 00:00:00, ..., 1900-01-01 00:59:00] 

有誰知道如何做到這一點?

編輯:

我設法做到這一點:

pd.to_datetime([(str(int(x))+' '+str(y)) for x,y in zip(np.floor(P.index/60),P.index%60)],format='%H %M') 
<class 'pandas.tseries.index.DatetimeIndex'> 
[1900-01-01 00:00:00, ..., 1900-01-01 23:59:00] 
Length: 1440, Freq: None, Timezone: None 

我有一種感覺,有雖然一個更好的辦法?

回答

3

這裏我把np.arange(1480)可以使用P.index

在> = 0.15.0 /主

In [5]: pd.Timestamp('20130101') + pd.to_timedelta(np.arange(1480),unit='m') 
Out[5]: 
<class 'pandas.tseries.index.DatetimeIndex'> 
[2013-01-01 00:00:00, ..., 2013-01-02 00:39:00] 
Length: 1480, Freq: None, Timezone: None 

工程(在10月初2014推出)在所有版本

In [4]: pd.DatetimeIndex((pd.Timestamp('20130101') + pd.to_timedelta(np.arange(1480),unit='m')).values) 

Out[4]: 
<class 'pandas.tseries.index.DatetimeIndex'> 
[2013-01-01 00:00:00, ..., 2013-01-02 00:39:00] 
Length: 1480, Freq: None, Timezone: None 

剛感興趣的是,這裏是一個timedelta resample in action:

In [4]: pd.set_option('max_rows',10) 

In [5]: df = DataFrame({'A' : np.arange(1480)},index=pd.to_timedelta(np.arange(1480),unit='T')) 

In [6]: df 
Out[6]: 
        A 
0 days 00:00:00  0 
0 days 00:01:00  1 
0 days 00:02:00  2 
0 days 00:03:00  3 
0 days 00:04:00  4 
...    ... 
1 days 00:35:00 1475 
1 days 00:36:00 1476 
1 days 00:37:00 1477 
1 days 00:38:00 1478 
1 days 00:39:00 1479 

[1480 rows x 1 columns] 

In [7]: df.resample('30T',how='sum') 
Out[7]: 
        A 
0 days 00:00:00 435 
0 days 00:30:00 1335 
0 days 01:00:00 2235 
0 days 01:30:00 3135 
0 days 02:00:00 4035 
...    ... 
0 days 22:30:00 40935 
0 days 23:00:00 41835 
0 days 23:30:00 42735 
1 days 00:00:00 43635 
1 days 00:30:00 14745 

[50 rows x 1 columns]