web-dev-qa-db-fra.com

pandas: extraire la date et l'heure de l'horodatage

J'ai une colonne timestamp où l'horodatage est au format suivant

2016-06-16T21:35:17.098+01:00

Je veux en extraire la date et l'heure. J'ai fait ce qui suit:

import datetime as dt

df['timestamp'] = df['timestamp'].apply(lambda x : pd.to_datetime(str(x)))

df['dates'] = df['timestamp'].dt.date

Cela a fonctionné pendant un certain temps. Mais soudain, ce n'est pas le cas.

Si je fais à nouveau df['dates'] = df['timestamp'].dt.date J'obtiens l'erreur suivante

Can only use .dt accessor with datetimelike values

Heureusement, j'ai enregistré le bloc de données avec dates dans le csv mais je veux maintenant créer une autre colonne time au format 23:00:00.051

MODIFIER

À partir du fichier de données brutes (15 millions d'échantillons), la colonne timestamp ressemble à ceci (5 premiers échantillons):

            timestamp

0           2016-06-13T00:00:00.051+01:00
1           2016-06-13T00:00:00.718+01:00
2           2016-06-13T00:00:00.985+01:00
3           2016-06-13T00:00:02.431+01:00
4           2016-06-13T00:00:02.737+01:00

Après la commande suivante

df['timestamp'] = df['timestamp'].apply(lambda x : pd.to_datetime(str(x)))

la colonne timestamp ressemble à dtype comme dtype: datetime64 [ns]

0    2016-06-12 23:00:00.051
1    2016-06-12 23:00:00.718
2    2016-06-12 23:00:00.985
3    2016-06-12 23:00:02.431
4    2016-06-12 23:00:02.737

Puis finalement

df['dates'] = df['timestamp'].dt.date

0           2016-06-12
1           2016-06-12
2           2016-06-12
3           2016-06-12
4           2016-06-12

MODIFIER 2

J'ai trouvé l'erreur. J'avais nettoyé les données et enregistré la trame de données dans un fichier csv, donc je n'ai pas à refaire le nettoyage. Lorsque je lis le csv, l'horodatage dtype se transforme en objet. Maintenant, comment puis-je résoudre ce problème?

12
chintan s

Si la date est sous forme de chaîne, alors:

import datetime

# this line converts the string object in Timestamp object
df['DateTime'] = [datetime.datetime.strptime(d, "%Y-%m-%d %H:%M") for d in df["DateTime"]]

# extracting date from timestamp
df['Date'] = [datetime.datetime.date(d) for d in df['DateTime']] 

# extracting time from timestamp
df['Time'] = [datetime.datetime.time(d) for d in df['DateTime']] 

Si l'objet est déjà au format Timestamp, sautez la première ligne de code.

%Y-%m-%d %H:%M cela signifie que votre objet d'horodatage doit être sous la forme 2016-05-16 12:35:00.

14
Ajay Goyal

Faites ceci en premier:

df['time'] = pd.to_datetime(df['timestamp'])

Avant de faire votre extraction comme d'habitude:

df['dates'] = df['time'].dt.date
7
Gursel Karacor