簡體   English   中英

如何將 pandas 日期時間列從 UTC 轉換為 EST

[英]How to convert a pandas datetime column from UTC to EST

還有一個 11 年前的問題,標題相似。

我有一個 pandas dataframe 和一列 datetime.time 值。

val    time
a      12:30:01.323
b      12:48:04.583
c      14:38:29.162

我想將時間列從 UTC 轉換為 EST。

我嘗試執行dataframe.tz_localize('utc').tz_convert('US/Eastern')但它給了我以下錯誤: RangeIndex Object has no attribute tz_localize

tz_localizetz_convert在 DataFrame 的索引上工作。因此您可以執行以下操作:

  1. 將“時間”轉換為時間戳格式
  2. 將“時間”列設置為索引並使用轉換函數
  3. reset_index()
  4. 只保留時間

嘗試:

dataframe["time"] = pd.to_datetime(dataframe["time"],format="%H:%M:%S.%f")
output = (dataframe.set_index("time")
                   .tz_localize("utc")
                   .tz_convert("US/Eastern")
                   .reset_index()
          )
output["time"] = output["time"].dt.time

>>> output
              time val
0  15:13:12.349211   a
1  15:13:13.435233   b
2  15:13:14.345233   c

to_datetime接受一個參數utc (bool) ,當它為真時,將時間戳強制轉換為 utc。

to_datetime返回一個DateTimeIndex ,它有一個方法tz_convert 此方法會將 tz 感知時間戳從一個 timezeone 轉換為另一個。

所以,這個轉換可以簡明地寫成

df = pd.DataFrame(
       [['a', '12:30:01.323'],
        ['b', '12:48:04.583'],
        ['c', '14:38:29.162']],
       columns=['val', 'time']
)
df['time'] = pd.to_datetime(df.time, utc=True, format='%H:%M:%S.%f') 
# convert string to timezone aware field ^^^
df['time'] = df.time.dt.tz_convert('EST').dt.time
# convert timezone, discarding the date part ^^^

這會產生以下 dataframe:

  val             time
0   a  07:30:01.323000
1   b  07:48:04.583000
2   c  09:38:29.162000

這也可以是 1-liner,如下所示:

pd.to_datetime(df.time, utc=True, format='%H:%M:%S.%f').dt.tz_convert('EST').dt.time
list_temp = []
for row in df['time_UTC']:
    list_temp.append(Timestamp(row, tz = 'UTC').tz_convert('US/Eastern'))
df['time_EST'] = list_temp

暫無
暫無

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

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