pandas中parquet文件对于缺失值的交互处理

pandas版本1.4.4

        pandas对于缺失值的处理在官方文档中有详细的说明。其把None和NaN都当做缺失值,即所有的关于缺失值的判断、处理和填充等函数都是兼容None的。额外要注意的是,None在python语言本身是可以用==判断的,但是在pandas中,其把None当作和NaN一样,都不能用==判断,比如不能用df == None来矢量化对于判断缺失值,因此需要通过特定的函数isna, isnull, notna, notnull这些函数来判断。

        当把一个带有缺失值的df写入到parquet文件,parquet的缺失值的处理是和python兼容的,会一律把缺失值转为None,无论原始的df中的缺失值是None还是NaN。由于pandas本身在将数据转为df时,会额外对缺失值进行处理,处理原则是,如果某列的类型推断为object,那么缺失值会保留原来的值,即None或NaN,但是如果带有缺失值的列推断为数值类型,那么缺失值会全部被转为浮点数类型的NaN,这时原来的None缺失值也会被转为NaN。

        因此,这里的过程是:df写入parquet文件,缺失值会被保存;当读取parquet时,缺失值会被parquet解析为python的None,但是pandas自身对缺失值做进一步处理:如果带有缺失值的列是object类型,那么缺失值为None,如果是数值类型,缺失值为NaN。

        大多数情况下,由于pandas对None和NaN的处理方式一致,不会有什么影响,但是少数情况下,为了统一,提供以下解决方式:

1. 可以在读取parquet文件时,指定use_nullable_dtypes=True,这样会把缺失值都转为统一的pd.NA,这个是pandas自身的缺失值,既不是NaN也不是None,但是缺失值函数也都兼容。

2. 读取后,可以通过df[df.isnull()] = np.nan的方式来将所有缺失值都转为NaN;或者使用df.replace({None:np.nan})方式替换。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值