2013-12-19 2 views
-1

Мне нужно преобразовать разницу между двумя строками в формате yyyy-mm-dd hh:mm:ss, представляя datetime, в integer. Так как я хочу, чтобы сделать это на всех индекса объекта DataFrame (построен с пандами), мне нужно встроенную функцию, чтобы сделать что-то вродеconvert string 'yyyy-mm-dd hh: mm: ss' date to integer (pandas, python)

data['difference'] = somefunc(data['date1'],data['date2']) 

Существует ли такая функция? Если я создаю свою собственную функцию, как ее можно применить к столбцам DataFrame?

Заранее благодарен!

ответ

0

Проверьте эту ссылку: http://docs.python.org/2/library/time.html?highlight=strptime В принципе вы можете разобрать строку в переменной struct_time, а затем получить доступ к значениям через атрибуты (tm_hour, tm_min ...).

Проверьте пример на time.strptime.

0

Требуется numpy> = 1.7. Это для панд 0.13 (освобождение в ближайшее время). См документы here

In [3]: df = DataFrame(dict(A = Timestamp('20130101'), B = Timestamp('20130101')+ pd.to_timedelta(list(range(5)),unit='D'))) 

In [4]: df 
Out[4]: 
        A     B 
0 2013-01-01 00:00:00 2013-01-01 00:00:00 
1 2013-01-01 00:00:00 2013-01-02 00:00:00 
2 2013-01-01 00:00:00 2013-01-03 00:00:00 
3 2013-01-01 00:00:00 2013-01-04 00:00:00 
4 2013-01-01 00:00:00 2013-01-05 00:00:00 

[5 rows x 2 columns] 

In [5]: df.dtypes 
Out[5]: 
A datetime64[ns] 
B datetime64[ns] 
dtype: object 

In [6]: df['C'] = df['B']-df['A'] 

In [7]: df 
Out[7]: 
        A     B    C 
0 2013-01-01 00:00:00 2013-01-01 00:00:00   00:00:00 
1 2013-01-01 00:00:00 2013-01-02 00:00:00 1 days, 00:00:00 
2 2013-01-01 00:00:00 2013-01-03 00:00:00 2 days, 00:00:00 
3 2013-01-01 00:00:00 2013-01-04 00:00:00 3 days, 00:00:00 
4 2013-01-01 00:00:00 2013-01-05 00:00:00 4 days, 00:00:00 

[5 rows x 3 columns] 

In [8]: df.dtypes 
Out[8]: 
A  datetime64[ns] 
B  datetime64[ns] 
C timedelta64[ns] 
dtype: object 

In [9]: df['C'].astype('timedelta64[s]') 
Out[9]: 
0   0 
1  86400 
2 172800 
3 259200 
4 345600 
Name: C, dtype: float64 

В 0.12 вы можете сделать это

In [1]: df = DataFrame(dict(A = Timestamp('20130101'), B = [Timestamp('20130101')+timedelta(days=i) for i in range(5) ])) 

In [2]: df['C'] = df['B']-df['A'] 

In [3]: Series(df['C'].values/np.timedelta64(1,'s')) 
Out[3]: 
0   0 
1  86400 
2 172800 
3 259200 
4 345600 
dtype: float64 
Смежные вопросы