簡體   English   中英

日期時間和熊貓之間的 Unix Epoche 值不匹配

[英]Unix Epoche value mismatch between datetime and pandas

我在熊貓數據框中存儲沒有時區信息的日期時間對象。 檢索時間戳信息時,時間戳與從原始日期時間對象獲取的時間戳不同。

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 數據框顯示相同的日期時間字符串,但紀元值不同。 兩個時間戳都移動了 3600 秒,這相當於我的本地時區差異(+1 小時)。

2020-03-20 01:05:05.457290

1584662705.45729

2020-03-20 01:05:05.457290

1584666305.45729

我的假設是 Pandas 使用自己的內部表示,它忽略了紀元值(可能使用年、月、日、小時...組件創建)並在 unix 時間(未本地化)中打印。 這意味着雖然兩個打印語句都產生相同的字符串,但熊貓時間實際上提前了 1 小時,因為它反映了通常滯后 1 小時的 unix。

以上正確嗎?

這在技術上還不是問題的解決方案,但我發現了一段更清晰的代碼,它似乎復制了這個問題:

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

使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM