You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中如何将datetime.time类型转换为datetime.date类型

问题背景

现有名为pomi的pandas DataFrame,样例数据结构如下:

date                time        sub
2019-09-20          00:00:00    25.0 org

需求为将date列转换为datetime.date类型,最终仅保留YYYY-MM-DD格式的日期内容(如2019-09-20)。

已尝试以下转换代码,均未实现需求:

pomi['date'] = pd.to_datetime(pomi['date'])
pomi['just_date'] = pomi['date'].dt.date
pomi.date = pd.to_datetime(pomi.date,dayfirst=True)
pomi['date'] = pd.to_datetime(pomi["date"].astype(str)).dt.time
pomi['date'] = pd.to_datetime(pomi['date']).dt.date
pomi['date'] = pd.to_datetime(pomi['date']).dt.normalize()

执行过程中最常触发的报错信息为:TypeError: <class 'datetime.time'> is not convertible to datetime

报错根因

之前执行的代码里有一行pomi['date'] = pd.to_datetime(pomi["date"].astype(str)).dt.time,这行代码会将date列的所有值覆盖为datetime.time类型的纯时间对象,这类对象只存储时分秒信息,不包含年月日属性,后续再调用pd.to_datetime处理该列时,自然会抛出类型无法转换的错误。且一旦执行这行赋值,原始列里的日期信息会被直接覆盖,无法从当前列找回。

可行解决方案

方案1:从源头读取时就指定日期解析(最稳妥)

重新读取原始数据,读取阶段就指定date列的解析规则,避免中途类型错改:

import pandas as pd

# 替换为你的实际数据读取逻辑,读入时直接将date列解析为datetime类型
# 如果是csv文件参考如下写法,其他数据源同理指定parse_dates参数即可
pomi = pd.read_csv("你的数据文件路径", parse_dates=['date'])

# 直接提取datetime.date类型的日期值
pomi['date'] = pomi['date'].dt.date

方案2:现有DataFrame修复

如果还能拿到未执行过.dt.time那行错误代码的原始DataFrame,跳过错误代码行,直接执行以下转换即可:

# 先将date列统一转为字符串,再解析为datetime类型,异常值标记为NaT
pomi['date'] = pd.to_datetime(pomi['date'].astype(str), errors='coerce')
# 提取date类型的日期值
pomi['date'] = pomi['date'].dt.date

转换完成后可以执行以下代码验证结果:

# 查看第一个值和对应类型
print(pomi['date'].iloc[0])
# 输出: 2019-09-20
print(type(pomi['date'].iloc[0]))
# 输出: <class 'datetime.date'>

注意:转换流程中不要加入.dt.time的赋值操作,这是触发本次报错的核心错误步骤,会直接丢失列内的日期信息。

内容的提问来源于stack exchange,提问作者John Kennedy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 18:45:41