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

Pandas中parse_dates仅解析部分日期列的原因咨询

解决pandas解析指定日期列仅成功一列的问题

可能的原因及排查方向

  • 列中存在非标准格式值:虽然你提到日期格式为YYYYmmdd.0,但未解析的列可能混入了无效值——比如20230230.0这类不存在的日期、带空格的数值(如 20231231.0),或是字符串类型的空值标记(如'NaN'),导致解析器无法识别整列格式。
  • Python引擎的解析特性:你使用的engine='python'对日期解析的容错性低于c引擎,尤其处理浮点型日期值(带.0)时,对边缘情况的处理更严格。可以尝试切换为engine='c'对比结果(需确保数据格式兼容c引擎)。
  • 空值类型不一致:两列的空值可能并非同一类型——一列是标准的np.nan,另一列可能是字符串空值或其他非标准标记,Python引擎无法将这类值识别为可跳过的空值,进而中断整列解析。
  • 隐性格式差异:表面格式一致的列,可能存在隐性差异,比如部分值存在大小写、多余字符,或是数值精度问题(如20231231.000),导致解析失败。

验证与排查代码示例

# 先读取原始数据,不解析日期
df_raw = s3manager_in.read_csv(
    object_key='Folder1/file1',
    sep=';',
    encoding='ISO-8859-1',
    compression='gzip',
    engine='python'
)

# 测试单列解析情况,强制指定格式并捕获错误
test_col1 = pd.to_datetime(df_raw['PRESENCE_UO_DT_FIN_PREVUE'], format='%Y%m%d.0', errors='coerce')
print(f"第一列解析后空值数: {test_col1.isna().sum()},原列空值数: {df_raw['PRESENCE_UO_DT_FIN_PREVUE'].isna().sum()}")

test_col2 = pd.to_datetime(df_raw['PERSONNE_DT_MODIF'], format='%Y%m%d.0', errors='coerce')
print(f"第二列解析后空值数: {test_col2.isna().sum()},原列空值数: {df_raw['PERSONNE_DT_MODIF'].isna().sum()}")

# 输出无法解析的具体值
bad_values = df_raw[test_col2.isna() & ~df_raw['PERSONNE_DT_MODIF'].isna()]['PERSONNE_DT_MODIF'].unique()
print(f"第二列无法解析的异常值: {bad_values}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:50:24