如何在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
相关产品推荐
相关产品推荐

