2016-06-03 3 views
-4

Я хочу преобразовать временные смещения, отформатированные как str, к datetime.timedelta объектам, а затем построить график наблюдений в зависимости от времени.python convert str to timedelta

'5 days, 4:23:52.480000' ;  17.647166 
'5 days, 5:56:09.166000' ;  22.916071 
'5 days, 8:21:40.261000' ;  18.922329 
'5 days, 9:53:18.070000' ; 21.392157 
'6 days, 0:07:54.487000' ;  20.275597 
+5

Добро пожаловать в SO, не могли бы вы показать свои усилия, поскольку SO не является сервисом написания кода, пожалуйста, покажите, как выглядит нужный сюжет – EdChum

+0

Это похоже на то, что вы действительно хотите 'timedelta', а не' datetime', правильно? – Paul

+0

_italic_ Да точно @Paul – Nabil

ответ

0

Для timedeltas не существует парсер. Таким образом, вы должны построить его самостоятельно:

import re 
delta = '5 days, 4:23:52.480000' 
days, hours, minutes, seconds = re.match('(?:(\d+) days,)?(\d+):(\d+):([.\d+]+)', delta).groups() 
total_seconds = ((int(days or 0) * 24 + int(hours)) * 60 + int(minutes)) * 60 + float(seconds) 
0

Пока я не знаю ничего, что разбирает текст в timedelta, формат вы указали понимается под pandas.Timedelta конструктора, так что если вы хотите, вы можете использовать это построить свои timedeltas:

import pandas as pd 
import matplotlib.pyplot as plt 

x = [['5 days, 4:23:52.480000', 17.647166], 
    ['5 days, 5:56:09.166000', 22.916071], 
    ['5 days, 8:21:40.261000', 18.922329], 
    ['5 days, 9:53:18.070000', 21.392157], 
    ['6 days, 0:07:54.487000', 20.275597]] 

df = pd.DataFrame(x, columns=['TimeOffset', 'Value']) 

df['TimeOffset'] = df['TimeOffset'].apply(pd.Timedelta) 

plt.plot(df['TimeOffset'], df['Value']) 
plt.show() 

людей, которые знают панда лучше, чувствовать себя свободно редактировать этот ответ (и удалить это сообщение) - Я чувствую, как я Построен pd.Timedelta колонка может быть не идиоматическим.