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

在Pandas中将日期时间转为'DD-MM-YYYY'时dtype变为Object的问题

解决Pandas中转换日期格式后保留datetime64类型的问题

问题原因

dt.strftime()方法的作用是将datetime对象转换为字符串,所以执行后列的 dtype 会从datetime64[ns]变为object(字符串类型),这是该方法的预期行为。因为Pandas的datetime类型本身不存储显示格式,它仅以时间戳的形式存储时间信息,显示格式只是输出时的渲染规则。

解决方案

方案1:设置显示格式,保留datetime64类型

如果你只是希望在查看数据时显示指定格式,不需要修改列的底层类型,推荐使用以下两种方式:

全局设置日期显示格式

通过pd.options.display.date_format设置全局的日期显示规则,所有datetime列都会以该格式显示:

import pandas as pd

data = {
    'id': [1, 2, 3],
    '_time': ["2023-07-27 10:30:00", "2023-07-28 15:45:00", "2023-07-29 09:15:00"]
}
df = pd.DataFrame(data)

# 转换为datetime类型(核心步骤,保留时间戳信息)
df['_time'] = pd.to_datetime(df['_time'])

# 设置全局日期显示格式
pd.options.display.date_format = "%d-%m-%Y %H:%M:%S"

print(df)
print(df.dtypes)  # 输出:_time    datetime64[ns]

针对单个列设置显示格式

如果只需要特定列以指定格式显示,可以使用style.format方法(适合生成可视化报表或HTML输出):

# 针对_time列设置显示格式
styled_df = df.style.format({'_time': lambda x: x.strftime("%d-%m-%Y %H:%M:%S")})
print(styled_df)

方案2:导出时指定日期格式

如果需要将数据导出为文件(如CSV)并保留指定的日期格式,无需修改列的 dtype,只需在导出时指定date_format参数:

# 导出CSV时指定日期格式,底层列仍为datetime64
df.to_csv('output.csv', date_format="%d-%m-%Y %H:%M:%S", index=False)

关键提醒

datetime类型的核心价值在于支持时间运算(如日期加减、排序、按时间范围筛选等),如果将其转换为字符串,这些功能会全部丢失。因此除非有特殊需求,否则应优先保留datetime64类型,仅调整显示格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:15:07