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?
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
.
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