python - 如何使用 pandas tz_convert 转换为多个不同的时区

标签 python pandas

我有一些数据,如下所示,UTC 格式为 hour。我想根据 time_zone 创建一个名为 local_hour 的新列。我怎样才能做到这一点?似乎 pandas 的 tz_convert 不允许将列或 pandas 系列作为 tz 参数的输入。

# Create dataframe
import pandas as pd
df = pd.DataFrame({
    'hour': ['2019-01-01 05:00:00', '2019-01-01 07:00:00', '2019-01-01 08:00:00'],
    'time_zone': ['US/Eastern', 'US/Central', 'US/Mountain']
})

# Convert hour to datetime and localize to UTC
df['hour'] = pd.to_datetime(df['hour']).dt.tz_localize('UTC')

df 
        hour                     time_zone
0   2019-01-01 05:00:00+00:00   US/Eastern
1   2019-01-01 07:00:00+00:00   US/Central
2   2019-01-01 08:00:00+00:00   US/Mountain

# Create local_hour column to convert hour to US/Eastern time (this works)
df['local_hour'] = df['hour'].dt.tz_convert(tz='US/Eastern')
df
    hour                        time_zone   local_hour
0   2019-01-01 05:00:00+00:00   US/Eastern  2019-01-01 00:00:00-05:00
1   2019-01-01 07:00:00+00:00   US/Central  2019-01-01 02:00:00-05:00
2   2019-01-01 08:00:00+00:00   US/Mountain 2019-01-01 03:00:00-05:00

# Try to create local_hour column to convert hour based on time_zone column (this fails) 
df['local_hour'] = df['hour'].dt.tz_convert(tz=df['time_zone'])
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

最佳答案

dt.tz_convert期望其 tz 参数的标量值,而不是类似时区的值列表。使用 apply,它本质上是一个循环:

df['local_hour'] = df.apply(lambda row: row['hour'].tz_convert(row['time_zone']), axis=1)

关于python - 如何使用 pandas tz_convert 转换为多个不同的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57810307/

相关文章:

python - Pandas Groupby 仅相同 ID 且列值为 false 时

python - Pandas DataFrame 如何解释两个给定的列?

python - 如何在 python 中将数据框与分号合并?

python-3.x - pandas如何将二维数据框转换为一维数据框

python - 使用 `[data2]` 和 `[[data2]]` 与 `groupby` 有什么区别

python - 如何将文档附加到mongodb中的现有文档

python - 尝试在 Mac 上安装 MySQL-python 但一直出现错误

python - 我怎样才能优雅地组织这个多线程Python代码呢?

python - Python 标点符号替换

python - DataFrame.stack() 后的新索引级别名称