Unix Несоответствие значения Epoche между датой и pandas - PullRequest
0 голосов
/ 20 марта 2020

Я храню объекты даты и времени без информации о часовом поясе в кадре данных pandas. При получении информации о метке времени метка времени отличается от метки, полученной из исходного объекта datetime.

import pandas as pd
from datetime import datetime

dt = datetime.now()
print(dt)
print(dt.timestamp())

df = pd.DataFrame(data=[(dt)],columns=["date"])
print(df)

epoche_from_pandas = df.date.apply(lambda x: x.timestamp()).values[0]
print(epoche_from_pandas)

Печать кадра данных pandas показывает ту же строку datetime, но значение периода отличается. Обе временные метки сдвигаются на 3600 секунд, что эквивалентно разнице моего местного часового пояса (+1 час).

2020-03-20 01: 05: 05.457290

1584662705.45729

2020-03-20 01: 05: 05.457290

1584666305.45729

Я предполагаю, что pandas использует свое собственное внутреннее представление, которое игнорирует значение эпохи (может быть создано с использованием компонентов год, месяц, день, час ...) и печатает за unix время ( не локализовано). Это означало бы, что в то время как оба оператора печати приводят к одной и той же строке, время pandas фактически на 1 час вперед, поскольку оно отражает unix, которое обычно отстает на 1 час.

Верно ли указанное выше?

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Технически это еще не решение проблемы, но я нашел более понятный фрагмент кода, который, кажется, повторяет проблему:

from datetime import datetime

import pandas as pd

dt = datetime.now()
print(f"dt: {dt}")
print(f"dt timestamp: {dt.timestamp()}\n")

pd_ts = pd.Timestamp(dt)
print(f"pd Ts: {pd_ts}")
print(f"pd Ts .timestamp(): {pd_ts.timestamp()}")

print(dt.timestamp() - pd_ts.timestamp())

Вывод:

dt: 2020-03-19 21:06:12.627798
dt timestamp: 1584666372.627798

pd Ts: 2020-03-19 21:06:12.627798
pd Ts .timestamp(): 1584651972.627798
14400.0
0 голосов
/ 20 марта 2020

Использование to_pydatetime () преобразует данные в объект python datetime, а затем timestamp() возвращает то же значение.

import pandas as pd
from datetime import datetime

dt = datetime.now()
print(dt)
print(dt.timestamp())

df = pd.DataFrame(data=[(dt)],columns=["date"])
print(df)

epoche_from_pandas = df.date.apply(lambda x: x.to_pydatetime().timestamp()).values[0]
print(epoche_from_pandas)

Результаты:

2020-03-19 21:20:56.633482
1584667256.633482
                        date
0 2020-03-19 21:20:56.633482
1584667256.633482
...