numpy 庫中的一些統計函式,它們在遇到含 nan 的資料時都無法正常使用,需要換成可用的同名函式(即在函式名前加「nan」)。
1、相關函式
1.1、最大值 max()、nanmax() / 最小值 min() nanmin()
沿指定軸返回乙個陣列的最小 / 大值。
numpy.max(a, axis=none, out=none, keepdims=)
引數:a - array_like ,陣列或者可以轉化成陣列的物件
axis - 無 none(預設)、整型 int、元組 tuple;沿軸線方向的操作方式
1.2、百分位數 percentile 、nanpercentile
計算陣列中沿指定方向上的第q 數值百分位(點),可以計算多維陣列的任意百分比分位數
numpy.percentile(a, q, axis=none, out=none, overwrite_input=false, interpolation=『linear』, keepdims=false)
引數:a - array_like ,陣列或者可以轉化成陣列的物件
q - [ 0., 100. ] 百分位
overwrite_input - bool 型引數,為 true 並且 a 的型別是ndarray,則 a 將被部分後者全部排序
axis - 無 none(預設)、整型 int、元組 tuple;沿軸線方向的操作方式
1.3、中位數 median、nanmedian
計算陣列 a 在沿 axis 軸方向上的中位數
numpy.median(a, axis=none, out=none, overwrite_input=false, keepdims=false)
引數:a - array_like ,陣列或者可以轉化成陣列的物件
overwrite_input - bool 型引數,為 true 並且 a 的型別是ndarray,則 a 將被部分後者全部排序
axis - 無 none(預設)、整型 int、元組 tuple;沿軸線方向的操作方式
1.4、2.4 標準差std、nanstd
沿指定軸計算陣列的標準偏差。
numpy.std(a, axis=none, dtype=none, out=none, ddof=0, keepdims=)
引數:a - array_like ,陣列或者可以轉化成陣列的物件
ddof - 自由度,計算時的分母為 n(資料數量) - ddof,預設 ddof = 0
axis - 無 none(預設)、整型 int、元組 tuple;沿軸線方向的操作方式
1.5、方差var、nanvar
沿指定軸計算陣列的方差 var 【 = mean(abs(x - x.mean()) ** 2)】。
numpy.var(a, axis=none, dtype=none, out=none, ddof=0, keepdims=)
引數:a - array_like ,陣列或者可以轉化成陣列的物件
ddof - 自由度,計算時的分母為 n(資料數量) - ddof,預設 ddof = 0
axis - 無 none(預設)、整型 int、元組 tuple;沿軸線方向的操作方式
2、注意事項
2.1、陣列中有nan的影響
在含有 nan 數值的陣列上採用不帶 「nan」字首的統計函式處理,結果都是返回 nan ,需要換成帶 「nan」字首的同名統計函式處理。
2.2、相同功能的不同函式效率比較
以取包含 nan 的陣列裡的最大值為例,有以下方法
import numpy as np
import pandas as pd
from time import time
arr1 = np.arange(100000)
arr2 = np.repeat(np.ndarray(np.nan), 10000)
arr = np.concatenate((arr1, arr2))
ser = pd.series(arr)
# 從陣列中找最大值
t1 = time()
m1 = np.nanmax(arr)
print(f'1、np.nanmax(arr),用時 ')
t1 = time()
m2 = np.nanmax(ser.values)
print(f'2、np.nanmax(ser.values),用時 ')
t1 = time()
m2 = np.nanmax(ser)
print(f'3、np.nanmax(ser),用時 ')
t1 = time()
m2 = ser.max()
print(f'4、ser.max(),用時 ')
[out]:
1、np.nanmax(arr),用時 0.0009999275207519531
2、np.nanmax(ser.values),用時 0.0
3、np.nanmax(ser),用時 0.0
4、ser.max(),用時 0.00500035285949707
其中,第 2、3 個的時間差幾乎為0,看看耗時到底多少?
t1 = time()
m2 = np.nanmax(ser.values)
print(f't1 = ')
print(f't2 = ')
[out]:
t1 = 1609675066.2239056
t2 = 1609675066.2259057
可見,耗時最多的是 直接對 series 取 .max(),耗時最少的是用 np.max() 求陣列的最大值。
其他函式也類似。
pandas中關於nan的處理
在pandas中有個另類的存在就是nan,解釋是 not a number,不是乙個數字,但是它的型別確是乙個float型別。numpy中也存在關於nan的方法,如 np.nan 對於pandas中nan的處理,簡單的說有以下幾個方法。檢視是否是nan,s1.isnull 和 s1.notnull ...
Pandas中NaN缺失值處理
三 小結 讀取電影資料 pandas刪除缺失值,使用dropna的前提是,缺失值的型別必須是np.nan 不修改原資料 movie.dropna 可以定義新的變數接受或者用原來的變數名 data movie.dropna 替換存在缺失值的樣本的兩列 替換填充平均值,中位數 movie revenue...
matlab 矩陣中對NaN的處理方式
解決的問題 為了能夠對採集的資料矩陣做資料處理,需要對矩陣中的存在的nan進行查值替換 function result matrix findnan matrix 找到矩陣中nan,並用同列前乙個數字替換 計算矩陣行列數 r 行數,c 列數 r,c size matrix temp isnan ma...