2 votes

Pandas - comportement incorrect de la fonction map

J'ai rencontré un "bug" vraiment étrange lorsque j'applique une fonction en utilisant map .

Voici l'exemple csv que vous pouvez utiliser pour reproduire le problème :

DATE
2017-03-12 02:59:00
2017-03-12 03:59:00

Voici le code que j'utilise :

import pandas as pd
import datetime

df = pd.read_csv('example.csv', parse_dates = ['DATE'])

df['TIMESTAMP_C'] = [str(x.timestamp()) for x in df['DATE']]
df['TIMESTAMP_H'] = df['DATE'].map(datetime.datetime.timestamp).map(str)

Et voici le cadre de données de sortie :

                 DATE   TIMESTAMP_C   TIMESTAMP_H
0 2017-03-12 02:59:00  1489287540.0  1489309140.0
1 2017-03-12 03:59:00  1489291140.0  1489309140.0

Ainsi, comme vous pouvez le constater, l'horodatage renvoyé par la fonction map est le même et n'est pas correct. Je me demande pourquoi le list comprehension renvoie les bons. Il se peut qu'il ne s'agisse pas d'un bogue et que je fasse seulement des erreurs avec la fonction map, mais j'aimerais vraiment l'utiliser car elle accélère beaucoup le calcul.

EDIT : Je ne demande pas comment faire, je demande pourquoi la façon dont je le fais donne des résultats différents.

2voto

juanpa.arrivillaga Points 35811

La fonction carte fonctionne bien. Vous passez une méthode "non liée", qui appartient à la classe datetime.datetime, à savoir datetime.datetime.timestamp et vous passez des pandas._libs.tslibs.timestamps.Timestamp s'y opposent. Vous ne devriez pas vous attendre à ce que cela fonctionne, et je suis surpris qu'il n'y ait pas d'erreur.

Il s'agit plutôt d'utiliser le .timestamp de la méthode pd.TimeStamp classe, donc :

In [3]: df.DATE.map(pd.Timestamp.timestamp).map(str)
Out[3]:
0    1489287540.0
1    1489291140.0
Name: DATE, dtype: object

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X