如何统一数据框单列中不一致的Date & Time日期时间格式
数据框混合格式日期时间列统一方案
核心处理逻辑是放弃手动写正则逐类替换的思路,用支持多格式自动匹配的日期解析函数逐行识别,避免格式错配产生NA值。
R语言处理方案(适配data.frame/tibble)
- 优先使用
lubridate包的parse_date_time()函数,提前传入列内存在的所有日期时间格式规则,函数会自动逐行匹配对应规则完成解析:
# 加载依赖 library(lubridate) library(dplyr) # 假设原始数据框为df,存在格式问题的列名为Date & Time df <- df %>% mutate( `Date & Time` = parse_date_time( x = `Date & Time`, # 按列内实际存在的两种格式传入匹配规则 orders = c("mdy HM", "ymd HMS"), tz = "Asia/Shanghai" # 按需替换为数据对应的时区 ) )
规则对应说明:
mdy HM匹配mm/dd/yy HH:MM格式:m代表月、d代表日、y代表两位年份、H代表24小时制小时、M代表分钟ymd HMS匹配yyyy/mm/dd HH:MM:SS格式:y代表四位年份、S代表秒- 解析完成后得到标准POSIXct类型的日期时间值,如果需要统一输出为固定样式的字符串,可以额外套一层
format()函数指定输出格式,比如统一输出为yyyy-mm-dd HH:MM:SS:
df <- df %>% mutate( `Date & Time` = format(`Date & Time`, "%Y-%m-%d %H:%M:%S") )
- 解析完成后做校验:运行
sum(is.na(df$Date & Time)),如果返回结果为0说明全量值解析成功;如果存在非0的NA值,提取对应位置的原始值排查是否存在其他未覆盖的异常格式,补充到orders参数的规则列表里即可。
Python Pandas处理方案
- 直接使用pandas内置的
pd.to_datetime()函数,开启格式自动推断参数即可识别混合格式:
import pandas as pd # 假设原始数据框为df,存在格式问题的列名为"Date & Time" df["Date & Time"] = pd.to_datetime( df["Date & Time"], infer_datetime_format=True ) # 如需统一输出为指定字符串格式,执行以下代码 df["Date & Time"] = df["Date & Time"].dt.strftime("%Y-%m-%d %H:%M:%S")
- 校验方法:运行
df["Date & Time"].isna().sum(),确认NA数量是否符合预期,存在异常值时单独排查补规则即可。
内容的提问来源于stack exchange,提问作者admo7000
相关产品推荐
相关产品推荐

