如何使用Pandas提取日期列前N个字符并清理CSV日期数据?
用Pandas批量清理带多余字符的日期列
问题分析
你之前的代码有两个关键问题:
- 列名不匹配:原DataFrame的日期列是
date_of_birth,但你写的是date of birth和new date,导致程序找不到对应列 - 切片语法错误:Pandas中Series.str的切片应该用
str[:10],而非str[0,10]
几种可行的解决方法
方法1:固定长度截取(适合日期格式统一为MM/DD/YYYY的情况)
你的日期都是MM/DD/YYYY格式,正好占10个字符,直接截取前10位即可:
import pandas as pd df = pd.DataFrame({ 'name': ['alice','bob','charlie'], 'date_of_birth': ['10/25/2005 R','10/29/2002','01/01/2001 BD'] }) # 截取前10个字符得到干净的日期字符串 df['cleaned_dob'] = df['date_of_birth'].str[:10]
方法2:正则表达式提取(更灵活,适配各种后缀)
如果日期后面的多余字符不固定,用正则提取符合MM/DD/YYYY格式的部分,兼容性更强:
# 提取匹配XX/XX/XXXX的日期片段 df['cleaned_dob'] = df['date_of_birth'].str.extract(r'(\d{2}/\d{2}/\d{4})')[0]
方法3:直接解析为datetime类型(推荐,便于后续日期操作)
把清理后的日期直接转成Pandas的datetime类型,既完成清理,又能方便后续做日期计算、筛选等操作:
# errors='coerce'会把无法解析的内容转为NaT,方便后续排查异常数据 df['cleaned_dob'] = pd.to_datetime(df['date_of_birth'], errors='coerce') # 如果需要转回字符串格式,可使用strftime df['cleaned_dob_str'] = df['cleaned_dob'].dt.strftime('%m/%d/%Y')
内容的提问来源于stack exchange,提问作者Emilio Prill
相关产品推荐
相关产品推荐

