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

Pandas数据框列名转日期遇弃用警告:问题与解决

Pandas日期列名转换与警告处理

问题背景

现有一个Pandas数据框,仅部分列名为日期格式(示例中日期为字符串类型,实际为object类型):

import pandas as pd

df = pd.DataFrame({
    "activity": ["clean dishes", "fix porch", "slep on couch"],
    "finished": ["NaT", "NaT", "2022-12-29"],
    "2022-12-27 00:00:00": [1,1,1],
    "2022-12-28 00:00:00": [1,1,1],
    "2022-12-29 00:00:00": [1,1,0]
})

print(df.columns)
# 输出:Index(['activity', 'finished', 2022-12-27 00:00:00, 2022-12-28 00:00:00, 2022-12-29 00:00:00], dtype='object')

需求是将最后三列的列名转换为仅含日期(不含时间戳)的格式,以便和finished列中的日期比较,在活动完成前的对应位置填充0。尝试过相关转换方法但未生效。

尝试的代码及警告

编写了以下代码尝试转换列名:

from datetime import datetime
import pandas as pd

def format_header_dates(dataframe):
    """将表头中的日期转换为日期格式"""
    for column in dataframe.columns:
        if isinstance(column, pd.Timestamp):
            new_column = pd.Timestamp(column).date()
            dataframe = dataframe.rename(columns={column: new_column})
    return dataframe

df = format_header_dates(df)

运行后触发以下警告:

FutureWarning: Comparison of Timestamp with datetime.date is deprecated in order to match the standard library behavior. In a future version these will be considered non-comparable. Use 'ts == pd.Timestamp(date)' or 'ts.date() == date' instead.  return key in self._engine

疑问

  1. 是否有更优的方法转换部分列名为日期格式?
  2. 该警告的触发原因是什么(是否由isinstance导致),如何修正?

解决方案

经过排查,找到可规避警告且完成需求的方法:

  • 步骤1:使用pd.to_datetime(column).normalize().to_datetime64()将日期列名转换为datetime64[ns]类型并标准化(将时分秒纳秒设为0,无需保留该精度)。
  • 步骤2:执行日期比较等所需操作。
  • 步骤3:使用pd.to_datetime(column).to_datetime64().astype('datetime64[D]')仅保留日期部分,完成格式美化。

此方法可顺利完成所有日期操作,且不再触发上述FutureWarning。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:45:29