使用Pandas从日期类型数据中提取日期值
提取日期字符串中的YYYY-MM-DD部分
问题描述
现有如下格式的数据集:
time ID 2021-04-16T00:00:00.000-0800 AA 2021-04-23T00:00:00.000-0800 AA 2021-04-30T00:00:00.000-0800 BB
需要将time列转换为仅保留YYYY-MM-DD格式的日期值,最终得到如下结果:
time ID 2021-04-16 AA 2021-04-23 AA 2021-04-30 BB
当前使用的代码df["time"] = df["time"].str.extract(r'(\w+)')无法得到正确结果——正则\w+仅匹配连续的字母、数字和下划线,无法包含日期中的连字符-,只会提取出2021这部分,不符合需求。
改进方案
方案1:字符串切片(最简单高效)
目标日期部分固定为字符串的前10个字符,直接通过切片截取:
df["time"] = df["time"].str[:10]
方案2:修正正则表达式
使用精准正则匹配开头的YYYY-MM-DD格式:
df["time"] = df["time"].str.extract(r'^(\d{4}-\d{2}-\d{2})')[0]
这里^(\d{4}-\d{2}-\d{2})表示从字符串开头匹配「4位数字+连字符+2位数字+连字符+2位数字」的格式,确保准确提取日期部分。
方案3:转换为datetime类型后处理(推荐,若数据为日期类型)
如果time列已经是datetime类型(或可转换为该类型),直接利用pandas的datetime属性提取日期:
# 先转换为datetime类型(若还未转换) df["time"] = pd.to_datetime(df["time"]) # 提取日期并转为字符串格式 df["time"] = df["time"].dt.strftime('%Y-%m-%d') # 若不需要字符串格式,也可直接保留date对象 # df["time"] = df["time"].dt.date
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

