python numpy关于excel表格nan值的bug处理,出现提示:‘float‘ object has no attribute ‘dtype‘ 的分析与解决。

(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])  

python numpy关于excel表格nan值的bug处理,出现提示:‘float‘ object has no attribute ‘dtype‘ 的分析与解决。_第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]))

python numpy关于excel表格nan值的bug处理,出现提示:‘float‘ object has no attribute ‘dtype‘ 的分析与解决。_第2张图片

提示:'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

你可能感兴趣的:(numpy,nan值,python)