2

一連の datetime64[ns] オブジェクトがあります。

日付と分 (HH:MM) の部分を抽出したいと思います。これまでのところ、以下のコードを使用していますが、非常に遅いです。どうすればこれをより効果的に行うことができますか?

>>> type(df['EXECUTION_TIMESTAMP'])
Out[1]: pandas.core.series.Series


>>> df['EXECUTION_TIMESTAMP']
Out[1]: 
0    2012-12-13 16:46:37
1    2012-12-13 16:46:42
2    2012-12-13 16:46:47

...

68   2010-09-07 15:21:38
69   2013-07-21 21:40:14
70   2010-07-21 22:44:46
Name: EXECUTION_TIMESTAMP, Length: 769552, dtype: datetime64[ns]


# Get the DateTimes Only
ets = pd.Series(df['EXECUTION_TIMESTAMP'])

print('Converting times')
dt_min = []
dd     = []
for x in ets:
    dt_min.append(pd.datetime(2000,1,1,x.hour,x.minute))
    dd.append(pd.datetime(x.year,x.month,x.day))
4

1 に答える 1

2
In [1]: df = DataFrame(dict(time = Series([Timestamp('20121213 16:46:37'),Timestamp('20121213 16:46:42'),Timestamp('20121213 16:46:47'),Timestamp('20100907 16:21:38')])))

In [2]: df
Out[2]: 
                 time
0 2012-12-13 16:46:37
1 2012-12-13 16:46:42
2 2012-12-13 16:46:47
3 2010-09-07 16:21:38

In [3]: df.dtypes
Out[3]: 
time    datetime64[ns]
dtype: object

In [4]: index = pd.DatetimeIndex(df['time'])

In [5]: index
Out[5]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-12-13 16:46:37, ..., 2010-09-07 16:21:38]
Length: 4, Freq: None, Timezone: None

In [6]: zip(index.minute,index.second)
Out[6]: [(46, 37), (46, 42), (46, 47), (21, 38)]

タプルのリストではなく、時、分を抽出した日付として表示

In [10]: Series([ datetime.datetime(2000,1,1,t.hour,t.minute) for t in pd.DatetimeIndex(df['time']).time ])
Out[10]: 
0   2000-01-01 16:46:00
1   2000-01-01 16:46:00
2   2000-01-01 16:46:00
3   2000-01-01 16:21:00
dtype: datetime64[ns]

最終的にはこれでグループ化したいと思います。直接やるだけ

df.set_index('time').groupby(lambda x: x.hour,lambda x: x.minute).apply(...)
于 2013-07-24T14:20:55.427 に答える