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

PySpark date_add返回NULL值:Excel整数日期转换异常排查

解决PySpark中Excel整数日期转真实日期的问题

问题根源

你的代码返回NULL主要有两个原因:

  • 日期格式不匹配:to_timestamp使用的'd/M/yy'格式和输入的'1899-12-30'(yyyy-MM-dd)不兼容,导致基准日期转换失败,后续计算自然返回NULL。
  • 列引用错误:cast('Date_Column' as Integer)里的单引号把列名变成了字符串常量,而非引用DataFrame中的列值,无法获取到实际的日期偏移量。

正确解决方案

方法1:修复expr表达式

修正格式字符串,去掉列名的单引号,同时统一用to_date(因为只需要日期,不需要时间戳):

df = df.select(
    col('Date_Column'),
    expr("date_add(to_date('1899-12-30', 'yyyy-MM-dd'), cast(Date_Column as Integer))").alias('New_Date_Column')
)

方法2:用PySpark函数链式调用(更直观)

避免使用expr,直接用PySpark内置函数组合,可读性更强:

from pyspark.sql.functions import col, date_add, to_date

df = df.select(
    col('Date_Column'),
    date_add(to_date('1899-12-30', 'yyyy-MM-dd'), col('Date_Column').cast('int')).alias('New_Date_Column')
)

方法3:处理带时间的Excel日期(可选)

如果你的Date_Column包含小数(比如2.5表示1900-01-01 12:00:00),可以用时间戳直接计算:

from pyspark.sql.functions import col, expr

# 把偏移量转为天数+秒数,生成带时间戳的完整日期
df = df.select(
    col('Date_Column'),
    expr("to_timestamp('1899-12-30', 'yyyy-MM-dd') + interval 1 day * Date_Column").alias('New_Date_Timestamp')
)

验证结果

执行上述代码后,Date_Column为2时,New_Date_Column会正确返回1900-01-01,其他整数偏移量也会得到对应的正确日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:19:54