如何将带多时区的datetime64[ns]类型时间转换为UTC时间
解决方法
你的原始时间列是无时区感知的datetime64[ns]类型,需要先为每个时间绑定对应的时区,再转换为UTC。
方法1:使用zoneinfo(Python 3.9+ 内置)
import pandas as pd from zoneinfo import ZoneInfo # 示例DataFrame df = pd.DataFrame({ 'timestamp': pd.to_datetime(['2024-05-20 12:00:00', '2024-05-20 10:00:00']), 'timezone': ['Asia/Shanghai', 'Europe/London'] }) # 为每个时间绑定对应时区并转换为UTC df['utc_timestamp'] = df.apply( lambda row: row['timestamp'].tz_localize(ZoneInfo(row['timezone'])).tz_convert('UTC'), axis=1 )
方法2:使用pytz(兼容旧Python版本)
若Python版本低于3.9,可使用pytz库(需先安装:pip install pytz):
import pandas as pd import pytz # 示例DataFrame df = pd.DataFrame({ 'timestamp': pd.to_datetime(['2024-05-20 12:00:00', '2024-05-20 10:00:00']), 'timezone': ['Asia/Shanghai', 'Europe/London'] }) # 绑定时区并转UTC df['utc_timestamp'] = df.apply( lambda row: row['timestamp'].tz_localize(pytz.timezone(row['timezone'])).tz_convert('UTC'), axis=1 )
关键说明
tz_localize():为无时区的datetime对象添加时区信息,使其成为时区感知的datetime。tz_convert('UTC'):将带时区的datetime转换为UTC时间。- 若
timezone列是偏移量格式(如+08:00),可直接用tz_localize(row['timezone']),无需额外调用ZoneInfo或pytz.timezone。
内容的提问来源于stack exchange,提问作者user2419289
相关产品推荐
相关产品推荐

