np.nanmax和np.array([1,2,3,np.nan]).max()的区别
numpy中numpy.nanmax的官方文档
原理
在计算dataframe最大值时,最先用到的一定是Series对象的max()方法(),最终结果是4。
1
2
|
s1 = pd.Series([ 1 , 2 , 3 , 4 ,np.nan]) s1_max = s1. max () |
但是笔者由于数据量巨大,列数较多,于是为了加快计算速度,采用numpy进行最大值的计算,但正如以下代码,最终结果得到的是nan,而非4。发现,采用这种方式计算最大值,nan也会包含进去,并最终结果为nan。
1
2
3
|
s1 = pd.Series([ 1 , 2 , 3 , 4 ,np.nan]) s1_max = s1.values. max () >>>nan |
通过阅读numpy的文档发现,存在np.nanmax的函数,可以将np.nan排除进行最大值的计算,并得到想要的正确结果。
当然不止是max,min 、std、mean 均会存在列中含有np.nan时,s1.values.min /std/mean ()返回nan的情况。
速度区别
速度由快到慢依次:
1
2
3
|
s1 = pd.Series([ 1 , 2 , 3 , 4 , 5 ,np.nan]) #速度由快至慢 np.nanmax(s1.values) > np.nanmax(s1) > s1. max () |
numpy中nan和常用方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author: Jia ShiLin import numpy as np a = np.arange( 9 , dtype = float ).reshape( 3 , 3 ) a[[[ 1 ], [ 2 ]]] = np.nan print (a) # isnan函数 print (np.isnan(a)) a[np.isnan(a)] = 0 # 把nan替换成中值或者均值 print (a) print (np.count_nonzero(a)) # sum()统计求和 b = np.arange( 12 , dtype = int ).reshape( 2 , 6 ) print (b) print (np. sum (b, axis = 0 )) # 得到结果和行的形状一样 print (np. sum (b, axis = 1 )) # .mean() print (b.mean()) print (b.mean(axis = 0 )) print (b.mean(axis = 1 )) # np.median()中位数 print (np.median(b, axis = 0 )) # .min() .max() # .ptp()机值 print (np.ptp(b)) # .std()标注差 print (np.std(b, axis = 0 )) |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/xu136090331/article/details/94667987