Pandas与Koalas调用notna()及astype(str)处理空值结果差异原因咨询
Pandas与Koalas行为差异原因分析
1. notna()方法的底层实现差异
- Pandas底层基于NumPy数组实现,NumPy的object类型数组无法原生区分
None和浮点缺失值NaN,调用notna()做布尔索引的过程中会触发隐式类型转换,将原列中的None强制转为NaN,所以你会看到Pandas中执行df[df.notna()]后,原None位置变成浮点类型的NaN。 - Koalas是对Spark DataFrame的Python封装,Spark原生字符串类型列支持将
None作为独立的缺失值标记,不会在运算过程中做强制类型转换,因此调用notna()后原None值会保留,类型依然为NoneType。
2. astype(str)的转换逻辑差异
- Pandas的
astype(str)会对列中所有值执行强制字符串转换,包括浮点类型的NaN,因此转换后原NaN会变成字符串"nan",类型变为str。 - Koalas的
astype(str)完全对齐Spark的cast(StringType())逻辑,Spark在做类型转换时会保留缺失值的语义,不会将None转为普通字符串,因此转换后原None值依然保留,类型为NoneType。
如果需要在两者间对齐行为且数据量较大无法用mask,可以在转换类型前先调用fillna("nan"),Koalas的fillna是分布式执行的,不会有单节点性能问题,完全可以处理超大规模数据集。
内容的提问来源于stack exchange,提问作者Steven Adler
相关产品推荐
相关产品推荐

