(1)在实验过程中,对销售数据表的数据进行提取,发现表格中存在nan值,如下:
import numpy as np
import pandas as pd
from pandas import DataFrame
io = 'catering_sale.xls'
catering_sale_data = pd.read_excel(io) #读取销售数据表
datas_list = catering_sale_data.values.tolist() #将销售数据表转化为列表
datas_array = np.array(datas_list) #将列表转化为数组
print(datas_array[:,1])
(2)此时若直接利用numpy中的mean函数直接求平均值,会出现结果返回nan的情况,如下:
np.mean(datas_array[:,1])
(3)所以需要忽略nan值的存在,而numpy为我们提供了nanmean()函数,可以利用该函数忽略nan值的存在而去求平均值,但在运行过程中,发现出错,如下:
# 若数组中有空值,结果将显示nan,所以需要对nan进行忽略
# 使用np.nanxxx()
print(np.nanmean(datas_array[:,1]))
提示:'float' object has no attribute 'dtype'
(4)通过对np.nan的一番了解,如下:
①numpy 中的nan为not a number,表示一个不确定的数,所以两个nan是不相等的
②numpy还有一个判断数组元素是否为nan是方法isnan(),返回一个bool类型的数组
③none与none的区别:
在 python 里 none 是有着自己的独特类型(NoneType),而 nan 则是属于 float 类型。
nan 因为自身属于浮点数(特殊的float),从而能够参加部分运算。但 none 则不能参与任何运算。
(5)最终发现原来excel表格中的nan与np.nan不是同一类型,需要利用array(xx,float)将excel表格中的nan的类型转化成np.nan的float类型,如下:
import numpy as np
import pandas as pd
from pandas import DataFrame
io = 'catering_sale.xls'
catering_sale_data = pd.read_excel(io) #读取销售数据表
datas_list = catering_sale_data.values.tolist() #将销售数据表转化为列表
datas_array = np.array(datas_list) #将列表转化为数组
feature_2 = np.array(datas_array[:,1],float) #将excel表中的nan转化为numpy中的nan的float类型
print(np.nanmean(feature_2)) #求均值
问题得到解决。
参考文章:
[1]https://blog.csdn.net/weixin_26968079/article/details/112843858
[2]https://blog.csdn.net/qq_44971458/article/details/100972748
[3]https://blog.csdn.net/u013323018/article/details/90711888
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)