[英]How to convert pandas timezone aware timestamps to 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.