关于None,NaN , 空字符的比较与处理

参考博客:https://blog.csdn.net/August1226/article/details/80652048

当进行count操作时,NaN和None都不计算在内,""则被计算在内;当进行sum等计算时,会对除NaN和None以外的值进行计算。

无法把NaN转化为int型,否则会报错。(转换函数用astype)。我们可以先将NaN用fillna赋值为0,再进行转换为int型。

ValueError:Cannot convert NA to integer

例子如下:

from numpy import NaN
from pandas import Series, DataFrame
import numpy as np
import pandas as pd

# NaN,None,""的类型,三种在我们看来都是空值的数值,其变量类型是不同的。
print(type(NaN))
print(type(None))
print(type(""))

# 先构造一个DataFrame
test = {"id":[1,2,3,4,5],"birthday":['2000-01-01','',None,'2000-01-19',NaN],"name":['王菲','莫文蔚',NaN,None,'林宥嘉'],"score":[100,99,NaN,98,None]}
test = pd.DataFrame(test)
print(test)

# 简单统计计算
print(test['score'].count())
print(test['score'].sum())
print(test['birthday'].count())
# 当进行count操作时,NaN和None都不计算在内,""则被计算在内;当进行sum等计算时,会对除NaN和None以外的值进行计算。

# 空值填充
test['name'] = test['name'].fillna('我是空的!')
test['birthday']=test['birthday'].fillna('空空如也!')
print(test)

输出结果如下:

<class 'float'>
<class 'NoneType'>
<class 'str'>
     birthday  id  name  score
0  2000-01-01   1    王菲  100.0
1               2   莫文蔚   99.0
2        None   3   NaN    NaN
3  2000-01-19   4  None   98.0
4         NaN   5   林宥嘉    NaN
3
297.0
3
     birthday  id   name  score
0  2000-01-01   1     王菲  100.0
1               2    莫文蔚   99.0
2       空空如也!   3  我是空的!    NaN
3  2000-01-19   4  我是空的!   98.0
4       空空如也!   5    林宥嘉    NaN

fillna支持填入任何你想的值;fillna识别的空值是NaN和None。

test_1 = test.fillna(method='pad',limit = 1)  # 用前一个数据替代
test_2 = test.fillna(method='bfill',limit = 1)  # 用后一个数据替代
test_2 = test.fillna(test['score'].mean())  # 用统计量来替代
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值