2016-04-08 3 views
1

У меня есть столбец в кадре данных pandas, который содержит объекты datetime после применения метода pd.to_datetime(). Пока все хорошо. Теперь столбец содержит даты в форме '2016-02-08 09: 59: 00.510'. Однако я хотел бы как-то «отбросить» информацию о дате, создав входной сигнал в форме HH: MM: SS, например:Преобразование объектов pandas datetime

2016-02-08 09: 59: 00.510 -> 09:59: 00

Мне было интересно, если это возможно, и если да, я бы очень признателен за правильные способы сделать это.

Ниже приведен небольшой рабочий пример. Я смог преобразовать объекты datetime в целые числа (ns?), Но я не смог выяснить, как преобразовать объекты в столбце «Дата» в формат, который я хочу.

Как уже упоминалось: Любая помощь очень ценится!

import pandas as pd 
import time 

s1 = {'Timestamp' : ['20160208_095900.51','20160208_095901.51','20160208_095902.51','20160208_095903.51', 
        '20160208_095904.51','20160208_095905.51','20160208_095906.51','20160208_095907.51', 
        '20160208_095908.51','20160208_095909.51']} 

    df = pd.DataFrame(s1) 

    df['Date'] = pd.to_datetime(df['Timestamp'], format = '%Y%m%d_%H%M%S.%f') 
    df['ns'] = (df['Date'].astype(np.int64)/int(1e6)) 
    print df 

ответ

0

Если вы просто хотите новое строковое представление затем использовать dt.strftime:

In [7]: 
df['Time'] = df['Date'].dt.strftime('%H:%M:%S') 
df 

Out[7]: 
      Timestamp     Date  Time 
0 20160208_095900.51 2016-02-08 09:59:00.510 09:59:00 
1 20160208_095901.51 2016-02-08 09:59:01.510 09:59:01 
2 20160208_095902.51 2016-02-08 09:59:02.510 09:59:02 
3 20160208_095903.51 2016-02-08 09:59:03.510 09:59:03 
4 20160208_095904.51 2016-02-08 09:59:04.510 09:59:04 
5 20160208_095905.51 2016-02-08 09:59:05.510 09:59:05 
6 20160208_095906.51 2016-02-08 09:59:06.510 09:59:06 
7 20160208_095907.51 2016-02-08 09:59:07.510 09:59:07 
8 20160208_095908.51 2016-02-08 09:59:08.510 09:59:08 
9 20160208_095909.51 2016-02-08 09:59:09.510 09:59:09 

Если вы хотите datetime.time компонент затем использовать dt.time:

In [8]: 
df['Time'] = df['Date'].dt.time 
df 

Out[8]: 
      Timestamp     Date    Time 
0 20160208_095900.51 2016-02-08 09:59:00.510 09:59:00.510000 
1 20160208_095901.51 2016-02-08 09:59:01.510 09:59:01.510000 
2 20160208_095902.51 2016-02-08 09:59:02.510 09:59:02.510000 
3 20160208_095903.51 2016-02-08 09:59:03.510 09:59:03.510000 
4 20160208_095904.51 2016-02-08 09:59:04.510 09:59:04.510000 
5 20160208_095905.51 2016-02-08 09:59:05.510 09:59:05.510000 
6 20160208_095906.51 2016-02-08 09:59:06.510 09:59:06.510000 
7 20160208_095907.51 2016-02-08 09:59:07.510 09:59:07.510000 
8 20160208_095908.51 2016-02-08 09:59:08.510 09:59:08.510000 
9 20160208_095909.51 2016-02-08 09:59:09.510 09:59:09.510000 
+0

Когда бы вы предпочли 'ф.р. [» Date ']. Dt.strftime ('% H:% M:% S ') 'over' df [' Date ']. Apply (lambda x: x.strftime ('% H:% M:% S ')) '? – Zero

+1

@JohnGalt следует избегать «применять», если существует векторный метод, также я думаю, что 'dt.strftime' был добавлен в' 0.17.0', поэтому вам придется использовать 'apply' для более старых версий – EdChum

+0

@EdChum: many благодаря! Новая строка вполне достаточна. – Number42

Смежные вопросы