0
votes

Erreur de conversion Pandas Str to DateTime (60 minutes en minutes) ParserError: Minute doit être 0..59: 2015-04-24 12:60:46

J'essaie de convertir en DateTime avec une série donnée de STR code> dans Pandas avec pd.to_dateTime () code>. Cependant, j'ai un str code> dans lequel 60 y est dans le champ en minutes.

['2015-04-24 12:60:46',
 '2015-04-24 11:60:20',
 '2015-03-14 12:60:02',
 '2015-05-11 12:60:53',
 '2015-04-26 11:60:44',
 '2015-05-31 15:60:59',
 '2015-04-02 07:60:10',
 '2015-04-23 12:60:59',
 '2015-05-07 18:60:11',
 '2015-04-27 12:60:39',
 '2015-04-10 09:60:26',
 '2015-04-03 18:60:05',
 '2015-05-20 08:60:37',
 '2015-05-08 12:60:17',
 '2015-04-16 12:60:50',
 '2015-03-26 09:60:51',
 '2015-03-20 08:60:29',
 '2015-03-21 13:60:19',
 '2015-03-07 01:60:16',
 '2015-05-31 14:60:56',
 '2015-03-06 18:60:01',
 '2015-05-17 14:60:46',
 '2015-03-10 04:60:18',
 '2015-05-23 12:60:30',
 '2015-04-17 09:60:53',
 '2015-04-23 17:60:34',
 '2015-03-31 12:60:50',
.....]


1 commentaires

Alors, quelle est votre production attendue? Depuis votre échantillon de données, je suppose que cela est juste une sortie non valide (la minute est toujours 60) - en fait, vous ne connaissez pas la minute réelle des horodatages?


3 Réponses :


0
votes

Valeurs divisées par l'espace par série.str.split code> puis convertissez la partie de date en date à DateTimes et ajoutez une partie du temps converti en TimeDeltas par TO_TIMEDELTA CODE> :

df['date'] = (pd.to_datetime(df['date'].replace(":60:",":59:", regex=True)) +  
              pd.Timedelta(1, 'min'))
print (df)
                 date
0 2015-04-24 13:00:46
1 2015-04-24 12:00:20
2 2015-03-14 13:00:02
3 2015-05-11 13:00:53


0 commentaires

0
votes

Si vous souhaitez considérer le 60 0 , puis remplacer ": 60:" avec ": ". Si vous voulez 60 pour être zéro secondes dans la minute suivante, incrémentez le champ minute si ": 60:" est présent et le faire avant de faire le remplacement.


0 commentaires

0
votes

processus de deux étapes

  1. correction : 60: em> en le remplaçant avec : 59: em> li>
  2. puis convertissez-le à DateTime Li> OL>
    d = ['2015-04-24 12:60:46', '2015-04-24 11:60:20', '2015-03-14 12:60:02', '2015-05-11 12:60:53', '2015-04-26 11:60:44', '2015-05-31 15:60:59', '2015-04-02 07:60:10', '2015-04-23 12:60:59', '2015-05-07 18:60:11', '2015-04-27 12:60:39', '2015-04-10 09:60:26', '2015-04-03 18:60:05', '2015-05-20 08:60:37', '2015-05-08 12:60:17', '2015-04-16 12:60:50', '2015-03-26 09:60:51', '2015-03-20 08:60:29', '2015-03-21 13:60:19', '2015-03-07 01:60:16', '2015-05-31 14:60:56', '2015-03-06 18:60:01', '2015-05-17 14:60:46', '2015-03-10 04:60:18', '2015-05-23 12:60:30', '2015-04-17 09:60:53', '2015-04-23 17:60:34', '2015-03-31 12:60:50']
    
    (pd.DataFrame({"Date":d})
     .assign(Date=lambda x: x["Date"].str.replace(":60:",":59:"))
     .assign(Date=lambda x: pd.to_datetime(x["Date"]))
    )
    


2 commentaires

Êtes-vous sûr? Je pense que c'est nécessaire ajouter une minute.


Vous pouvez toujours simplement ajouter la minute de la minute en tant que dernière ligne de code d = d + pd.timedelta (minutes = 1)