Панды - неправильное поведение функции карты

Я столкнулся с действительно странной «ошибкой» при применении функции с использованием 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 возвращает правильные. Возможно, это не ошибка, а только то, что я делаю некоторые ошибки с функцией карты, однако мне бы очень хотелось использовать ее, поскольку она значительно ускоряет вычисления.

Обновлено: я не спрашиваю, как это сделать, я спрашиваю, почему то, как я это делаю, возвращает разные результаты

Я действительно не вижу дубликата. Я знаю, как преобразовать дату в метку времени, я спрашиваю, почему это неправильно с картой @ALollz

Guido Muscioni 29.01.2019 22:02

Но небольшая проблема с XY, если вы спросите меня, I would really like to use it as it speeds up the computation a lot. Вы не превзойдете производительность .astype(int64)/10**9 с этим .map.

ALollz 29.01.2019 22:05

Это правда, и я также смог это проверить. Во всяком случае, название вопроса является явным. Wrong behavior of map function не о преобразовании даты и времени. Возможно, я неправильно объяснил это, но это не ответ на этот вопрос. @ALollz

Guido Muscioni 29.01.2019 22:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Функция карты работает нормально. Вы передаете "несвязанный" метод, принадлежащий классу 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

Другие вопросы по теме