2016-06-03 1 views
-4

Je veux convertir les décalages temporels au format str en datetime.timedelta objets, puis tracer la courbe des observations en fonction du temps.python convertir str en 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

Bienvenue à SO, pourriez-vous montrer vos efforts comme SO n'est pas un service d'écriture de code, s'il vous plaît montrer à quoi ressemble l'intrigue désirée – EdChum

+0

Cela ressemble à ce que vous voulez réellement 'timedelta', pas' datetime', correct? – Paul

+0

_italic_ Oui exactement @Paul – Nabil

Répondre

0

Il n'y a pas analyseur pour timedeltas. Donc, vous devez construire un vous-même:

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

Bien que je ne sais pas tout ce qui parse texte dans timedelta, le format que vous avez spécifié est compris par le constructeur pandas.Timedelta, donc si vous voulez, vous pouvez l'utiliser pour construire votre 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() 

les gens qui connaissent mieux les pandas, ne hésitez pas à modifier cette réponse (et supprimer ce message) - Je me sens comme la façon dont je construisais la colonne pd.Timedelta peut être non idiomatiques.