我正在使用一個大型熊貓資料框,并希望添加一個與另一列的值相關的時間戳列。例如,當前資料框如下所示:
| 服務器 | 小時 |
|---|---|
| 服務器1 | 0 |
| 服務器2 | 0 |
| 服務器1000 | 0 |
| 服務器1 | 1 |
| 服務器2 | 1 |
依此類推,小時列的范圍為 0-167,因為它們與下一周的每小時時間戳相關。
我有以下代碼建立每周時間戳:
today = datetime.today()
start = (today - timedelta(days=today.weekday())).replace(hour=0, minute=0, second=0, microsecond=0)
end = (start timedelta(days=6)).replace(hour=0, minute=0, second=0, microsecond=0)
print("end: " str(end))
從那里,我嘗試在算術上創建新的“時間”列:
end=end.timestamp()
total_df['time']=end
total_df['time'] = total_df['time'].astype(float) #to convert to a float so I can multiply it with the time column
total_df['time']=total_df['time'] 3600*total_df['time'] #standardize timestamp to Sunday since the initial "end" was monday
然后我將時間列轉換回字串并將 unix 時間戳轉換為日期時間
total_df['hour'] = total_df['hour'].astype(str)
total_df['hour']=pd.to_datetime(total_df['hour'],unit='s', utc='true')
不幸的是,此方法不使用我當前的時區并標準化為 UTC,因此最終確定的每小時時間戳比應有的時間提前 4 小時。我可以通過在轉換前減去 4 小時來解決這個問題,但我覺得必須有一種更簡潔的方法來使用日期時間來做到這一點。我的解決方案似乎是一種迂回的說法,即“在小時列中添加多少小時”。
我的預期輸出應如下所示:
| 服務器 | 小時 | 時間 |
|---|---|---|
| 服務器1 | 0 | 2022-04-24 00:00:00-4:00 |
| 服務器2 | 0 | 2022-04-24 00:00:00-04:00 |
| 服務器x | 0 | 2022-04-24 00:00:00-04:00 |
| 服務器1000 | 0 | 2022-04-24 00:00:00-04:00 |
| 服務器1 | 1 | 2022-04-24 01:00:00-04:00 |
| 服務器2 | 1 | 2022-04-24 01:00:00-04:00 |
| 服務器x | 1 | 2022-04-24 01:00:00-04:00 |
| 服務器1000 | 1 | 2022-04-24 01:00:00-04:00 |
| X | X | X |
| 服務器1000 | 167 | 2022-04-30 23:00:00-04:00 |
其中“x”和“serverx”分別涵蓋了介于 1 和 1000 以及 1 和 167 之間的所有服務器和小時值。
或者,有沒有一種簡單的方法可以在時區之間轉換?我當前的輸出列看起來應該是它,除了它是 UTC 格式,我希望它是 EST 格式。
uj5u.com熱心網友回復:
我是否正確理解您從具有hour列的資料框開始,例如:
df = pd.DataFrame({'hour': range(5)})
hour
0 0
1 1
2 2
3 3
4 4
在這種情況下,您可以嘗試以下操作:
from datetime import date, datetime, timedelta
start = date.today()
df['time'] = (
datetime(start.year, start.month, start.day)
timedelta(days=6 - start.weekday())
df['hour'].astype('timedelta64[h]')
).dt.tz_localize('EST')
結果:
hour time
0 0 2022-04-24 00:00:00-05:00
1 1 2022-04-24 01:00:00-05:00
2 2 2022-04-24 02:00:00-05:00
3 3 2022-04-24 03:00:00-05:00
4 4 2022-04-24 04:00:00-05:00
或者使用明確的時區偏移:
from datetime import date, datetime, timedelta, timezone
start = date.today()
df['time'] = (
datetime(
start.year, start.month, start.day, tzinfo=timezone(timedelta(hours=-5))
)
timedelta(days=6 - start.weekday())
df['hour'].astype('timedelta64[h]')
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461750.html
上一篇:在oracle表中轉換日期/時間
