Панды - неправильное поведение функции карты - PullRequest
0 голосов
/ 29 января 2019

Я столкнулся с действительно странной "ошибкой" при применении функции с использованием map.

. Это пример csv, который можно использовать для воспроизведения проблемы:

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

Ниже приведен код, который я использую:

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)

И следующий выходной кадр данных:

                 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

Итак, как вы можете видеть, отметка времени возвращается вместе с картойфункции одинаковы и не верны.Мне интересно, почему list comprehension возвращает правильные.Это не может быть ошибкой, и только то, что я делаю некоторые ошибки с функцией карты, однако, я действительно хотел бы использовать это, поскольку это сильно ускоряет вычисления.

РЕДАКТИРОВАТЬ: я не спрашиваю, какдля этого я спрашиваю, почему то, как я это делаю, дает разные результаты

1 Ответ

0 голосов
/ 30 января 2019

Функция карты работает нормально.Вы передаете «несвязанный» метод, который принадлежит классу datetime.datetime, то есть datetime.datetime.timestamp, и передаете ему некоторый объект pandas._libs.tslibs.timestamps.Timestamp.Вы не должны ожидать, что это сработает, и я удивлен, что это не выдает ошибку.

Скорее, вы хотите использовать метод .timestamp класса pd.TimeStamp, поэтому:

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