Pandas如何将datetime.date类型索引转换为datetime.datetime类型
pandas将datetime.date类型索引转为datetime.datetime类型实现方法
你当前持有的是存储datetime.date对象的object类型普通索引,共有两种常用转换方案,优先推荐第一种:
方案1:pandas原生批量转换(生产环境首选)
直接调用pd.to_datetime()即可批量完成转换,转换后会得到pandas原生DatetimeIndex,其中元素为pandas.Timestamp类型。pandas.Timestamp是Python标准库datetime.datetime的子类,完全兼容所有datetime的方法、属性,同时支持pandas所有时间序列专属功能(重采样、时间粒度筛选、偏移计算等),执行效率远高于手写循环。
import pandas as pd # 执行索引转换 df.index = pd.to_datetime(df.index)
转换后可通过以下代码校验结果:
print(type(df.index)) # 输出:pandas.core.indexes.datetimes.DatetimeIndex print(type(df.index[0])) # 输出:<class 'pandas._libs.tslibs.timestamps.Timestamp'>
方案2:转换为原生Python datetime.datetime对象
如果场景严格要求使用Python标准库的原生datetime.datetime类型,而非pandas封装的Timestamp类型,可以通过列表推导式结合datetime.combine逐个拼接时间完成转换。注意该方案转换后索引会变回object类型,无法使用pandas时间序列的专属优化功能。
from datetime import datetime # 为每个date对象拼接当日0点时间,转为datetime类型 df.index = [datetime.combine(date_obj, datetime.min.time()) for date_obj in df.index]
转换后校验类型:
print(type(df.index[0])) # 输出:<class 'datetime.datetime'>
注意:两种方案均不会修改DataFrame的非索引数据,仅替换索引内容;如果索引存在空值,建议先完成缺失值处理再执行转换,避免触发报错。
内容的提问来源于stack exchange,提问作者roudan
相关产品推荐
相关产品推荐

