如何将TEXT类型的DOB列从Jan 30,2000格式转为30-01-2000?
将"Jan 30,2000"格式的TEXT日期转换为"30-01-2000"格式
你之前直接用date_format失败的核心原因是:原列是TEXT类型,必须先把字符串解析为日期类型,再进行格式化输出。以下是针对两种常用工具的解决方案:
方案1:使用Pandas(Kaggle常用环境)
Kaggle数据集通常用Python Pandas处理,步骤分为解析日期和格式化输出两步:
import pandas as pd # 读取数据集(示例为CSV格式,根据实际文件类型调整) df = pd.read_csv('your_kaggle_dataset.csv') # 第一步:将TEXT类型的DOB列解析为datetime对象 # %b 匹配英文月份缩写(如Jan、Feb),%d 匹配两位日期,%Y 匹配四位年份 df['DOB'] = pd.to_datetime(df['DOB'], format='%b %d,%Y') # 第二步:格式化为目标字符串格式(30-01-2000) df['DOB_formatted'] = df['DOB'].dt.strftime('%d-%m-%Y')
方案2:使用SQL(如MySQL)
如果用SQL处理数据集,需要先用STR_TO_DATE将字符串转为日期类型,再用DATE_FORMAT格式化:
查询转换结果
SELECT DATE_FORMAT(STR_TO_DATE(DOB, '%b %d,%Y'), '%d-%m-%Y') AS DOB_formatted FROM your_table_name;
新增列并存储转换结果
-- 先新增用于存储结果的列 ALTER TABLE your_table_name ADD COLUMN DOB_formatted VARCHAR(10); -- 更新列值完成转换 UPDATE your_table_name SET DOB_formatted = DATE_FORMAT(STR_TO_DATE(DOB, '%b %d,%Y'), '%d-%m-%Y');
关键说明
%b是匹配英文月份缩写的格式符,必须和原数据的月份格式完全对应;- 只有先完成字符串→日期类型的转换,
date_format才能识别内容为有效日期,否则会返回空值或报错。
内容的提问来源于stack exchange,提问作者Dejack
相关产品推荐
相关产品推荐

