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

如何在Pandas DataFrame中将日期列转为DD-MM-YYYY格式?

Pandas日期列格式转换问题

我的Pandas DataFrame中有一列日期字符串,格式为YYYY-MM-DD:

0       2023-01-01
1       2023-01-01
2       2023-01-01
3       2023-01-01
4       2023-01-01
           ...    
1015    2023-01-17
1016    2023-01-17
1017    2023-01-17
1018    2023-01-17
1019    2023-01-17

希望将其转换为DD-MM-YYYY格式:

0       01-01-2023
1       01-01-2023
2       01-01-2023
3       01-01-2023
4       01-01-2023
           ...    
1015    17-01-2023
1016    17-01-2023
1017    17-01-2023
1018    17-01-2023
1019    17-01-2023

尝试执行以下代码时触发错误:

df['date'] = "-".join(reversed(df['date'].split("-")))

错误信息:

AttributeError: 'Series' object has no attribute 'split'

请问有什么更合适的方法实现该日期列格式转换?


解决方案

方法一:转为日期类型再格式化(推荐)

先将字符串列转为Pandas日期类型,再用strftime指定输出格式,这种方式能自动校验日期合法性,避免字符串处理的潜在问题:

import pandas as pd

# 转换为日期类型
df['date'] = pd.to_datetime(df['date'])
# 格式化为DD-MM-YYYY字符串
df['date'] = df['date'].dt.strftime('%d-%m-%Y')

方法二:字符串拆分拼接(适用于格式严格的场景)

如果确认所有日期字符串都是标准的YYYY-MM-DD格式,可以直接对Series的每个元素做拆分重组:

# 拆分日期为年、月、日三列
split_parts = df['date'].str.split('-', expand=True)
# 按日-月-年顺序拼接
df['date'] = split_parts[2] + '-' + split_parts[1] + '-' + split_parts[0]

或者用更简洁的链式写法:

df['date'] = df['date'].str.split('-').apply(lambda x: '-'.join(reversed(x)))

注意:Series本身没有split方法,需调用str.split来对每个字符串元素执行拆分操作。

方法三:正则表达式替换

通过正则匹配年、月、日的位置,直接替换为目标顺序:

df['date'] = df['date'].str.replace(r'(\d{4})-(\d{2})-(\d{2})', r'\3-\2-\1', regex=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:45:50