簡體   English   中英

將UTC日期時間轉換為以熊貓為單位的本地日期時間

[英]Convert the UTC datetime to local datetime in pandas

我有一個包含UTC_Time和Timezone_info的數據框。 我需要將UTC_Time轉換為local_time。 我有以下代碼,但無法正常工作。 有沒有一種方法可以有效地做到這一點(我可以使用for循環,它可以工作,但如果可能的話,我想避免for循環)。

        UTC_Time         Timezone_info
0  2018-02-12 18:16:00       America/New_York
1  2018-02-15 11:39:00    America/Puerto_Rico
2  2018-02-15 22:17:00    America/Los_Angeles
3  2018-02-17 00:59:00      America/Guayaquil
4  2018-02-17 11:34:00  America/Santo_Domingo

我要使用的代碼是: data['local_time']=data['UTC_Time'].dt.tz_localize('UTC').dt.tz_convert(data['Timezone_info'])

但這是行不通的。

使它起作用的for循環(但可能是最慢的方法):

data['local_time']=0
for i in range(len(data)):
    tz=data.at[i,'Timezone_info']
    data.at[i,'local_time']=data.at[i,'UTC_Time'].tz_localize(data).tz_convert(tz)

pythonic的方法是什么?

由於tz_convert僅將一個時區作為參數,因此不會對其進行“向量化”。

您仍然可以使用矢量化形式的tz_convert ,但首先必須使用group_by根據時區拆分輸入。

data['local_time'] = (
    data['UTC_Time'].dt.tz_localize('UTC').       # Localize to UTC Time
    groupby(data['Timezone_info']).               # Group by time zone
    transform(lambda g: g.dt.tz_convert(g.name))) # Convert each group to local time zone

我花了一些時間才能發現groupby鍵在組對象的name成員中可用。 這應該添加到GroupBy.transform的文檔中。

使用df.apply可能有效。 這不是向量化的,但是確實避免了顯式的for循環。

def converter(row):
    return row['UTC_Time'].tz_localize('UTC').tz_convert(row['Timezone_info'])

df['local_time'] = df.apply(converter, axis=1)

暫無
暫無

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

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