系列文章:
python数据分析(一)——numpy数组的创建
python数据分析(二)——numpy数组的计算
python数据分析(三)——numpy读取本地数据和索引
python数据分析(五)——numpy+matplotlib实例
nan(NAN, Nan):not a number表示不是一个数字, nan是浮点类型,什么时候numpy中会出现nan:
inf(-inf, inf):infinity inf表示正无穷,-inf表示负无穷,什么时候会出现inf(-inf, +inf)
如何指定一个nan或者inf呢?注意type类型是float
nan和inf
In [1]: a = np.inf
In [2]: type(a)
Out[2]: float
In [3]: a = np.nan
In [4]: type(a)
Out[4]: float
In [1]: np.nan == np.nan
Out[1]: False
In [2]: np.nan != np.nan
Out[2]: True
方法一:
In [3]: t
Out[3]: array([1., 2., nan])
In [4]: np.count_nonzero(t!=t)
Out[4]: 1
t!=t除了nan的地方是true为1,其余地方都是false为0,所以count_nanzero不为零的地方只有nan对应的true的值1
方法二:
In [3]: t
Out[3]: array([1., 2., nan])
In [4]: np.count_nonzero(np.isnan(t))
Out[4]: 1
np.isnan(t)和 t!=t返回的false和true的结果是一样的
In [5]: t
Out[5]: array([1., 2., nan])
In [6]: t[np.isnan(t)] = 0
In [7]: t
Out[7]: array([1., 2., 0.])
在一组数据中单纯地把nan替换为0,如果替换之前的平均值大于0,替换之后的值肯定会变小,所以一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行
标准差是一组数据平均值分散程度的一种度量。一个较大的标准差,代表大部分数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值反映出数据的波动稳定情况,越大表示波动越大,越不稳定
默认返回多维数组的全部的统计结果,如果指定axis则返回一个当前轴上的结果
数据的填充
import numpy as np
def fill_ndarray(t):
for i in range(t.shape[1]): # 遍历每一列
temp_col = t[:, i] # 当前的一列
nan_num = np.count_nonzero(temp_col != temp_col)
if nan_num != 0: # 不为0,说明当前这一列中有nan
temp_not_nan_col = temp_col[temp_col == temp_col] # 当前一列不为nan的array
# 选中当前nan的位置,把值赋值为不为nan的均值
temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()
return t
if __name__ == '__main__':
t = np.arange(12).reshape((3, 4)).astype("float")
t[1, 2:] = np.nan
t = fill_ndarray(t)
print(t)