PySpark DataFrame不同数据类型列fillna操作合法性咨询
PySpark 多类型列fillna操作合法性解答
结论
df.fillna( { 'a':0, 'b':'2022-12-01' } ) 是错误写法,无法完成预期的空值填充。
核心规则说明
PySpark的fillna方法对填充值有严格的类型匹配要求,不会主动做隐式类型转换:
- 当传入字典指定各列填充值时,只有填充值类型和列类型匹配/兼容时,填充才会生效:
- float类型的a列传入整数0是兼容的,整数可自动向上转为float,这部分逻辑可正常运行
- date类型的b列直接传入字符串
'2022-12-01'属于类型不匹配,运行时要么抛出类型异常,要么直接跳过该列不做任何填充,完全达不到填充日期空值的目的。
- 你之前列举的
df.fillna(0, subset=['a', 'b'])写法虽然语法合法,但执行时只会自动筛选subset里的数值类型列填充0,date类型的b列会被直接忽略,不会被填充。
正确实现方式
给date类型列填充空值时,需要传入日期类型的匹配值,推荐使用Python原生datetime.date对象:
import datetime result_df = df.fillna({ 'a': 0, 'b': datetime.date(2022, 12, 1) })
内容的提问来源于stack exchange,提问作者nam
相关产品推荐
相关产品推荐

