You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何标准化Pandas DataFrame混合格式日期列?解决转换报错

问题分析与解决方案

问题原因

  1. 整数转换报错:原代码直接将float类型转为int时,遇到NaN(数据中隐含的缺失值)会抛出ValueError,因为NaN无法转换为整数。
  2. 无分隔符日期解析错误:pd.to_datetime默认将纯数字字符串(如"20110912")解析为时间戳(秒数),而非日期格式,因此得到1970年的错误结果。

修正后的代码

import numpy as np
import pandas as pd

df = pd.DataFrame({'date':[20110912.0, 20230102, '10/10/17', '4/8/14',
                           '7/28/2020', '20121001', '2023.01.02',
                           '2019-04-23 0:00:00', '2011-12-21 0:00:00', 
                           '07/28/14', '', 'NaN' ]})

# 统一转为字符串,将空值和"NaN"替换为实际缺失值
df['date'] = df['date'].astype(str).replace({'': np.nan, 'NaN': np.nan})

# 自定义函数处理不同格式的日期
def parse_date(date_str):
    if pd.isna(date_str):
        return np.nan
    # 匹配8位无分隔符数字日期(如20110912),强制按年月日格式解析
    if date_str.isdigit() and len(date_str) == 8:
        return pd.to_datetime(date_str, format='%Y%m%d')
    # 自动匹配其他带分隔符的日期格式,无法解析的转为缺失值
    return pd.to_datetime(date_str, errors='coerce')

# 应用解析函数,如需保留datetime类型可去掉.dt.date
df['date'] = df['date'].apply(parse_date).dt.date

print(df)

关键说明

  • 空值预处理:先将所有值转为字符串,把空字符串和"NaN"替换为np.nan,从根源避免转换异常。
  • 无分隔符日期强制解析:通过判断字符串长度和是否为纯数字,指定format='%Y%m%d',确保8位数字被正确识别为年月日。
  • 容错机制:使用errors='coerce'将无法解析的格式转为NaT(缺失的datetime值),保证代码稳定运行。

内容的提问来源于stack exchange,提问作者user21407177

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:42:57