python - 将 UTC 日期时间转换为 pandas 中的本地日期时间

标签 python python-3.x pandas pytz

我有一个由 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)

Python式的方法是什么?

最佳答案

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 的文档中.

关于python - 将 UTC 日期时间转换为 pandas 中的本地日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48630178/

相关文章:

python-docx 如何合并行单元格

python:逐点列表总和

python - 尝试用 Python 编写 Eratosthenes Sieve。这是正确的吗?我怎样才能让它更快?

python - 类型错误 : '<' not supported between instances of 'int' and 'str'

python-3.x - 加速 Pandas 迭代

pandas - Python 3 pandas 使用长度添加带有 if then 语句的列

python - 使用线程时不触发 Pyttsx3 回调

python - Core Reporting API - 如何使用多个 dimensionFilterClauses 过滤器?

python - PyTables 中的这个错误是什么?

python - 将 DataFrame 列表保存到多表 Excel 电子表格