J'ai une colonne de durée mais les valeurs sont différentes. Certaines durées ne sont que des formats d'heure et d'autres se sont mélangées à la date. Je veux la colonne de durée en secondes totales. J'ai essayé de convertir la colonne avec les méthodes to_datetime et parse_date mais cela ne peut pas fonctionner. Comment faire cela chez les pandas? Voici la colonne:
entrez la description de l'image ici
3 réponses
Utilisation de regex:
import pandas as pd
df = pd.DataFrame({"a": ["03:59:49", "04:59:49", "1904-01-01 05:59:49", "1904-01-01 06:59:49"]})
df["TotalSeconds"] = pd.to_timedelta(df["a"].str.extract('(\d{2}:\d{2}:\d{2})')).dt.total_seconds()
print(df)
Sortie:
a TotalSeconds
0 03:59:49 14389.0
1 04:59:49 17989.0
2 1904-01-01 05:59:49 21589.0
3 1904-01-01 06:59:49 25189.0
Filtrez les 8 dernières valeurs, convertissez to_timedelta
puis utilisez total_seconds
:
df = pd.DataFrame({'col':['03:59:49', '1904-01-01 04:06:08']})
df['new'] = pd.to_timedelta(df['col'].str[-8:]).dt.total_seconds().astype(int)
print (df)
col new
0 03:59:49 14389
1 1904-01-01 04:06:08 14768
ÉDITER:
df['new'] = pd.to_timedelta(pd.to_datetime(df['col']).dt.strftime('%H:%M:%S')).dt.total_seconds().astype(int)
Une façon consiste à utiliser pd.Series.apply
avec une clause try
/ except
, qui tente chaque méthode séquentiellement.
L'avantage de cette méthode est qu'elle accepte une large gamme d'entrées potentielles pour timedelta
et datetime
.
import pandas as pd, numpy as np
df = pd.DataFrame({'Mixed': ['03:59:49', '1904-01-01 04:06:08']})
def return_seconds(x):
try:
return pd.to_timedelta(x).total_seconds()
except:
try:
dt = pd.to_datetime(x)
return (dt - dt.normalize()).total_seconds()
except:
return np.nan
df['TotalSeconds'] = df['Mixed'].apply(return_seconds).astype(int)
print(df)
# Mixed TotalSeconds
# 0 03:59:49 14389
# 1 1904-01-01 04:06:08 14768
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.