1
votes

Comment utiliser: diviser la chaîne 'hh: mm: ss' en millisecondes float dans chaque ligne d'une dataframe en Python?

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 :


1
votes

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


0 commentaires

1
votes

Réponse la plus courte possible:

dataset['Avg Pace'].apply(convertMinToMs)


0 commentaires

1
votes

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>


0 commentaires