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

Pandas date列转object后apply返回Timestamp及去除00:00:00问题

问题解答

疑问1:已将date列转为object类型,为什么自定义函数接收的参数还是Timestamp类型?

你调用astype("object")仅会修改列的容器存储类型为object,并不会改变列中每个元素本身的类型,原datetime类型的元素本质还是pandas._libs.tslibs.timestamps.Timestamp对象,只是被放在了object类型的列容器中。

疑问2:为什么处理后date列类型自动变回datetime64[ns]?

pandas对列赋值时会自动推断最适配的存储类型,你的自定义函数原样返回了Timestamp对象,整列都是同类型Timestamp的情况下,pandas会自动将列的dtype调整为更紧凑高效的datetime64[ns],而非继续使用空间占用更高的object类型,这是pandas的内置类型推断优化逻辑。

疑问3:如何在自定义函数中去除日期后的00:00:00?

首先注意你当前定义的函数def date_func(value)末尾缺少冒号,属于语法错误,运行前需要先补上。你可以根据需求选择以下两种处理方案:

方案1:保留日期对象类型,仅去除时分秒

修改函数返回Timestamp对应的date对象即可:

def date_func(value):
    print(type(value))
    # 提取纯日期部分,返回datetime.date类型对象
    return value.date()

df["date"] = df["date"].apply(date_func)

处理后date列的dtype为object,打印时不会显示时分秒。

方案2:转为YYYY-MM-DD格式的字符串

修改函数返回格式化后的字符串:

def date_func(value):
    print(type(value))
    # 格式化输出为指定格式的日期字符串
    return value.strftime("%Y-%m-%d")

df["date"] = df["date"].apply(date_func)

处理后date列存储字符串类型的日期,不会显示时分秒。

性能优化提示:无需自定义函数调用apply,直接使用pandas内置的dt属性处理效率更高,等效写法如下:
转纯日期对象:df["date"] = df["date"].dt.date
转日期字符串:df["date"] = df["date"].dt.strftime("%Y-%m-%d")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:48:02