参考博客: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()) # 用统计量来替代