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

Pandas格式化DataFrame中除首列外的日期时间列标题

格式化Pandas DataFrame中的Datetime类型列标题

这问题我之前也碰到过,处理datetime类型的列标题其实很简单,用列表推导式或者自定义映射函数就能轻松搞定,结合你的测试数据,给你具体的解决方案:

基础解决方案(针对datetime.datetime类型列名)

先把你的测试数据补全,然后直接处理列名:

import pandas as pd
import datetime

# 测试数据
d = {
    datetime.datetime(2018, 1, 31, 8, 0): [9.1, 8.5, 7.4, 6.5, 5.3],
    datetime.datetime(2018, 2, 28, 9, 0): [9.2, 8.5, 7.2, 6.1, 5.2],
    datetime.datetime(2018, 3, 31, 10, 0): [9.3, 8.5, 7.1, 6.1, 5.1],
    'ID': [1, 2, 3, 4, 5],
}
# 构建完整的DataFrame
df = pd.DataFrame(d, columns=['ID', datetime.datetime(2018, 1, 31, 8, 0), datetime.datetime(2018, 2, 28, 9, 0), datetime.datetime(2018, 3, 31, 10, 0)])

# 格式化datetime类型列标题:这里用'%Y-%m-%d %H:%M'格式,你可以按需调整
df.columns = [col.strftime('%Y-%m-%d %H:%M') if isinstance(col, datetime.datetime) else col for col in df.columns]

# 查看处理后的列名
print(df.columns)

运行后,列名会变成:
Index(['ID', '2018-01-31 08:00', '2018-02-28 09:00', '2018-03-31 10:00'], dtype='object')

兼容Pandas Timestamp类型的情况

如果你是从Excel读取的数据,列名可能会被解析成pd.Timestamp类型(而非原生datetime),这时候只需要扩展判断条件,同时兼容两种类型:

# 兼容datetime和Timestamp的格式化逻辑
df.columns = [col.strftime('%Y-%m-%d %H:%M') if isinstance(col, (datetime.datetime, pd.Timestamp)) else col for col in df.columns]

更灵活的自定义格式化函数

如果你的格式化逻辑比较复杂(比如不同日期需要显示不同格式),可以写一个自定义函数,用map方法批量处理:

def format_column_name(col):
    # 判断是否为日期时间类型
    if isinstance(col, (datetime.datetime, pd.Timestamp)):
        # 自定义格式:比如只显示日期部分
        return col.strftime('%Y-%m-%d')
    # 非日期时间类型的列名直接返回
    return col

# 应用格式化函数到所有列名
df.columns = df.columns.map(format_column_name)

这样处理后,日期列名会变成2018-01-31这种纯日期格式,完全可以根据你的需求调整格式字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:33:37