如何在Pandas中将GMT格式Timestamp转换为UTC时间戳?
问题
我有一个Pandas DataFrame,其中TimeStamp列是GMT时区的DateTime格式,需要添加一列存储每个TimeStamp对应的UTC时间戳。
尝试的代码及报错
我编写了以下代码,但触发了类型错误:
import pandas as pd import datetime as dt df = pd.DataFrame({'ID': ['1', '2', '3'], 'TimeStamp': [2022-12-19 22:56:24, 2022-12-19 22:57:46, 2022-12-19 22:59:08]})
df['x'] = dt.datetime(df['TimeStamp']).timestamp()
报错信息:
TypeError: cannot convert the series to <class 'int'>
解决方案
1. 修正DataFrame的创建方式
原代码中TimeStamp列的时间写法不符合Python语法,需要将时间以字符串形式传入,再转换为带GMT时区的datetime类型:
import pandas as pd df = pd.DataFrame({ 'ID': ['1', '2', '3'], 'TimeStamp': ['2022-12-19 22:56:24', '2022-12-19 22:57:46', '2022-12-19 22:59:08'] }) # 转换为datetime并指定GMT时区 df['TimeStamp'] = pd.to_datetime(df['TimeStamp'], utc=True).tz_convert('GMT')
2. 生成UTC时间戳
datetime.datetime()无法直接处理Pandas Series,需使用Pandas内置的dt访问器调用timestamp()方法,直接生成秒级UTC时间戳:
df['UTC'] = df['TimeStamp'].dt.timestamp().astype(int)
也可以通过将datetime类型转换为纳秒级整数后除以10^9的方式获取秒级时间戳:
df['UTC'] = df['TimeStamp'].astype('int64') // 10**9
最终输出
| ID | TimeStamp | UTC |
|---|---|---|
| 1 | 2022-12-19 22:56:24 | 1671490584 |
| 2 | 2022-12-19 22:57:46 | 1671490666 |
| 3 | 2022-12-19 22:59:08 | 1671490748 |
内容的提问来源于stack exchange,提问作者Niro Mal
相关产品推荐
相关产品推荐

