如何将Pandas date_range转换为UTC毫秒级Epoch时间戳?
获取UTC时区的毫秒级Epoch时间戳列表
最优解法:直接利用Pandas原生方法(无需字符串转换)
Pandas生成的带时区的datetime对象可以直接转换为UTC时间戳,无需先转字符串再解析,既高效又能避免时区错误:
import pandas as pd # 生成带UTC时区的月度日期范围 dates = pd.date_range(start='1/1/2022', end='10/1/2022', freq='M', tz='UTC') # 转换为毫秒级UTC Epoch时间戳:先转纳秒级int64,再除以1e6得到毫秒 list_epoch = (dates.astype('int64') // 1000000).tolist() print(list_epoch)
原代码出错原因
你用time.mktime()处理解析后的时间时,这个函数的作用是将本地时区的struct_time转换为Epoch时间戳,而非UTC时间。即便解析的字符串带Z(UTC标识),time.strptime()生成的是无时区信息的struct_time,time.mktime()会默认把它当作本地时区处理,最终导致时间戳偏移。
若要保留字符串转换思路(不推荐)
如果一定要先转字符串再处理,需用datetime模块将字符串解析为带UTC时区的对象,再获取时间戳:
import pandas as pd from datetime import datetime, timezone dates = pd.date_range(start='1/1/2022', end='10/1/2022', freq='M', tz='UTC').strftime("%Y-%m-%dT%H:%M:%S.%fZ").tolist() list_epoch = [] for i in dates: # 解析字符串为UTC时区的datetime对象 dt = datetime.strptime(i, "%Y-%m-%dT%H:%M:%S.%fZ").replace(tzinfo=timezone.utc) # 获取UTC时间戳(秒级)并转换为毫秒 epoch = int(dt.timestamp() * 1000) list_epoch.append(epoch) print(list_epoch)
两种方法的输出结果一致,比如第一个日期2022-01-31 00:00:00+00:00对应的毫秒级Epoch为1643577600000。
内容的提问来源于stack exchange,提问作者Caroline Silva
相关产品推荐
相关产品推荐

