我有一個 Pandas DataFrame 如下:
timestamp
1583985600000
1584072000000
1584331200000
1584417600000
1584504000000
1584590400000
實際上還有其他列,但為了簡單起見,我粘貼了上面的列。
我需要通過在同一個 DataFrame 中創建一個單獨的列來將此列更改為日期格式。我嘗試以下操作:
df["date EST"] = pd.to_datetime(agg_daily_df["timestamp"],
unit='ms').dt.tz_localize('EST').astype(str)
...這給出了以下結果:
date EST
2020-03-12 04:00:00-05:00
2020-03-13 04:00:00-05:00
2020-03-16 04:00:00-05:00
2020-03-17 04:00:00-05:00
2020-03-18 04:00:00-05:00
2020-03-19 04:00:00-05:00
...這對我來說看起來很奇怪。第一行實際上應該給
2020-03-12 00:00:00.
我在這里做錯了什么,以至于我得到了奇怪格式的結果?
uj5u.com熱心網友回復:
這將在 UTC 中回傳時間作為 tz-naive 日期時間。
pd.to_datetime(agg_daily_df["timestamp"], unit='ms')
# 1583985600000 => 2020-03-12 04:00:00
所以,本地化這個日期時間,它會導致
original: 1583985600000 =>
pd.to_datetime: 2020-03-12 04:00:00 (tz-naive) =>
tz_localize: 2020-03-12 04:00:00-05:00 (tz-aware, EST)
問題是您需要在轉換為其他時區之前具有 tz 感知日期時間。
# Add utc=True to get tz-aware time and convert to EST
(pd.to_datetime(agg_daily_df["timestamp"], unit='ms', utc=True)
dt.tz_convert('EST'))
這樣時間就會轉換成這樣。
original: 1583985600000 =>
to_datetime with utc=True: 2020-03-12 04:00:00 00:00 (tz-aware, UTC) =>
tz_convert: 2020-03-11 23:00:00-05:00 (tz-aware, EST)
請注意,“EST”時區不處理夏令時。如果您想要處理夏令時,請使用時區的語言環境。
(pd.to_datetime(agg_daily_df["timestamp"], unit='ms', utc=True)
.dt.tz_convert('America/New_York'))
這會給你2020-03-12 00:00:00-04:00。
================================================== ======
更新:
如果您想再次擁有 tz-naive 時間,請通過以下方式洗掉 tzinfo tz_localize(None)
(pd.to_datetime(agg_daily_df["timestamp"], unit='ms', utc=True)
.dt.tz_convert('America/New_York')
.tz_localize(None))
或者,如果您只想有時間而不顯示時區偏移,請使用strftime將日期時間格式化為字串。
(pd.to_datetime(agg_daily_df["timestamp"], unit='ms', utc=True)
.dt.tz_convert('America/New_York')
.transform(lambda x: x.strftime('%Y-%m-%d %H:%M:%S'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/381303.html
上一篇:將列中的字串集串列轉換為新列
