Je suis assez novice en python et j'ai du mal avec ML-Problem où je veux convertir une colonne au format 'hh: mm: ss' en millisecondes. Les rythmes sont Type: String et Milliseconds doit être ensuite Type: float.
J'ai trouvé comment convertir des valeurs uniques avec la fonction suivante:
import datetime
def convertMinToMs(s):
hr, min, sec = map(float, s.split(':'))
milliseconds = ((min * 60)*1000) + (sec*1000)
return milliseconds
millisec = convertMinToMs(dataset['Avg Pace'].iloc[0])
Je ne sais pas comment faire cela pour une série de données. J'ai essayé de passer dans la série en supprimant le .iloc [0] mais cela se traduit par l'erreur suivante:
AttributeError: l'objet 'Series' n'a pas d'attribut 'split' p>
3 Réponses :
Convertissez la colonne en DataFrame avec 3 colonnes, transtypez en flottants, puis plusieurs deuxième et troisième colonnes:
millisec = pd.to_timedelta(dataset['Avg Pace']).values.astype(np.int64) / 10**6 print (millisec) [ 912000. 36090000.]
Mais si besoin est également en millisecondes avec heures, convertissez les valeurs en timedeltas par to_timedelta , puis au format natif en nanosecondes et divisez pendant ms:
df = dataset['Avg Pace'].str.split(':', expand=True).astype(float)
print (df)
0 1 2
0 0.0 15.0 12.0
1 10.0 1.0 30.0
millisec = ((df[1] * 60)*1000) + (df[2]*1000)
print (millisec)
0 1 2
0 0.0 15.0 12.0
1 10.0 1.0 30.0
Réponse la plus courte possible:
dataset['Avg Pace'].apply(convertMinToMs)
Essayez d'utiliser la fonction de pandas:
dataset['Avg Pace'] = pd.to_datetime(dataset['Avg Pace'], format="%H:%M:%S")
Ensuite, vous pouvez obtenir ce que vous voulez de ces objets datetime.
J'espère que cela fonctionne
p>
vous pouvez utiliser apply pandas.pydata.org/ pandas-docs / stable / reference / api /…