0
votes

Pandas: Extraire la date de l'horodatage non conventionnel - AAAA / MM / JJ: HH: MM: SS AM

J'ai des données au format suivant:

     Name       date1       date2
0     bob  2014-05-12  2014-08-31
1  george  2014-05-15  2014-08-12

Comment manipuler les deux colonnes de date pour obtenir le format suivant?

Résultat attendu:

d = {'Name': ['bob', 'george'], 'date1': ['2014/05/12:12:00:00 AM', '2014/05/15:12:00:00 AM'], 'date2': ['2014/08/31:11:59:59 PM', '2014/08/12:11:59:59 PM']}
df = pd.DataFrame(data=d)

   Name                   date1                   date2
0     bob  2014/05/12:12:00:00 AM  2014/08/31:11:59:59 PM
1  george  2014/05/15:12:00:00 AM  2014/08/12:11:59:59 PM


1 commentaires

Voulez-vous que les dates soient des horodatages ou simplement des chaînes?


5 Réponses :


1
votes

Vous pouvez faire:

     Name      date1      date2
0     bob 2014-05-12 2014-08-31
1  george 2014-05-15 2014-08-12

Sortie:

dates = ['date1','date2']
df[dates] = df[dates].apply(lambda x:pd.to_datetime(x).dt.normalize())


0 commentaires

1
votes

Essayez ceci:

d = {'Name': ['bob', 'george'], 'date1': ['2014/05/12:12:00:00 AM', '2014/05/15:12:00:00 AM'], 'date2': ['2014/08/31:11:59:59 PM', '2014/08/12:11:59:59 PM']}
df = pd.DataFrame(data=d)
df['date1'] = pd.to_datetime(df['date1'], format='%Y/%m/%d:%H:%M:%S %p').dt.date
df['date2'] = pd.to_datetime(df['date2'], format='%Y/%m/%d:%H:%M:%S %p').dt.date
print(df)

     Name       date1       date2
0     bob  2014-05-12  2014-08-31
1  george  2014-05-15  2014-08-12


0 commentaires

2
votes

Utilisez pandas.to_datetime avec l'argument format :

df['date1'] = pandas.to_datetime(df['date1'], format='%Y/%m/%d:%H:%M:%S %p')

Documentation Pandas: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas. to_datetime.html

Documentation de mise en forme: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior


0 commentaires

2
votes

Utilisez pd.to_datetime code> avec format :

In [1177]: df.date1 = pd.to_datetime(df.date1, format='%Y/%m/%d:%I:%M:%S %p').dt.date     
In [1178]: df.date2 = pd.to_datetime(df.date2, format='%Y/%m/%d:%I:%M:%S %p').dt.date  

In [1179]: df    
Out[1179]: 
     Name       date1       date2
0     bob  2014-05-12  2014-08-31
1  george  2014-05-15  2014-08-12


1 commentaires

Cela fonctionnera puisque vous n'êtes intéressé que par la partie date. La colonne est cependant au format 12 heures et non au format 24 heures.



1
votes

Voilà:

     Name       date1       date2
0     bob  2014-05-12  2014-08-31
1  george  2014-05-15  2014-08-12

Résultat:

import pandas as pd
from datetime import datetime

d = {'Name': ['bob', 'george'], 'date1': ['2014/05/12:12:00:00 AM', '2014/05/15:12:00:00 AM'], 'date2': ['2014/08/31:11:59:59 PM', '2014/08/12:11:59:59 AM']}
df = pd.DataFrame(data=d)
date_extractor = lambda dts : datetime.strptime(dts, '%Y/%m/%d:%I:%M:%S %p').date()
df['date1'] = df['date1'].apply(date_extractor)
df['date2'] = df['date2'].apply(date_extractor)
print(df)


0 commentaires