Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在numpy数组中用0替换nan来计算平均值?_Python_Numpy - Fatal编程技术网

Python 如何在numpy数组中用0替换nan来计算平均值?

Python 如何在numpy数组中用0替换nan来计算平均值?,python,numpy,Python,Numpy,如何在以下数据集中用零替换NaN?:我的目标是进行以下估计,假设匹配是下面给出的数据集: # average the data avg = {} for k, v in matches.items(): avg[k] = sum(v) / float(len(v)) print(avg) 的内容与匹配: {('AD', 'MM', 'TT'): [], ('AD', 'MM', 'VV'): [array([54.0, 97.0, 160.0, nan, 9.0, nan, nan,

如何在以下数据集中用零替换NaN?:我的目标是进行以下估计,假设
匹配
是下面给出的数据集:

# average the data
avg = {}
for k, v in matches.items():
    avg[k] = sum(v) / float(len(v))
print(avg)
的内容与
匹配:

{('AD', 'MM', 'TT'): [], ('AD', 'MM', 'VV'): [array([54.0, 97.0, 160.0, nan, 9.0, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan], dtype=object), array([176.0, 68.0, 166.0, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object), array([nan, 55.0, 176.0, nan, 34.0, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan], dtype=object), array([38.0, 72.0, 466.0, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan], dtype=object), array([62.0, 20.0, 397.0, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan], dtype=object), array([40.0, 31.0, 94.0, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan], dtype=object), array([104.0, 70.0, 338.0, nan, 19.0, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object), array([99.0, 62.0, 401.0, nan, 37.0, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object), array([53.0, 109.0, 262.0, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object), array([45.0, 55.0, 159.0, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan], dtype=object), array([80.0, 104.0, 438.0, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object), array([81.0, 75.0, 141.0, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan], dtype=object), array([140.0, 43.0, 192.0, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object), array([72.0, 26.0, 704.0, nan, 57.0, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object), array([67.0, 49.0, 210.0, nan, 20.0, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object), array([122.0, 67.0, 546.0, nan, 25.0, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object), array([130.0, 61.0, 400.0, nan, 20.0, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object), array([88.0, 133.0, 354.0, nan, nan, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object), array([77.0, 42.0, 212.0, nan, 31.0, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object), array([138.0, 64.0, 132.0, nan, 49.0, nan, nan, nan, nan, nan, nan, nan,
       nan, nan, nan], dtype=object)]}
计算平均值,忽略所有NaN;在您的情况下,这将产生以下结果

In [1]: import numpy as np
   ...: matches = {('AD', 'MM', 'TT'): [], ('AD', 'MM', 'VV'): [[54.0, 97.0, 160.0, np.nan, 9.0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 
   ...: np.nan, np.nan, np.nan, np.nan], [176.0, 68.0, 166.0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.
   ...: nan, np.nan], [np.nan, 55.0, 176.0, np.nan, 34.0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], [38.0,
   ...:  72.0, 466.0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], [62.0, 20.0, 397.0, np.nan
   ...: , np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], [40.0, 31.0, 94.0, np.nan, np.nan, np.nan, np.
   ...: nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], [104.0, 70.0, 338.0, np.nan, 19.0, np.nan, np.nan, np.nan, np.nan, 
   ...: np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], [99.0, 62.0, 401.0, np.nan, 37.0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan
   ...: , np.nan, np.nan, np.nan], [53.0, 109.0, 262.0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, n
   ...: p.nan], [45.0, 55.0, 159.0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], [80.0, 104.0
   ...: , 438.0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], [81.0, 75.0, 141.0, np.nan, np.
   ...: nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], [140.0, 43.0, 192.0, np.nan, np.nan, np.nan, np.nan
   ...: , np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], [72.0, 26.0, 704.0, np.nan, 57.0, np.nan, np.nan, np.nan, np.nan, np.n
   ...: an, np.nan, np.nan, np.nan, np.nan, np.nan], [67.0, 49.0, 210.0, np.nan, 20.0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np
   ...: .nan, np.nan, np.nan], [122.0, 67.0, 546.0, np.nan, 25.0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]
   ...: , [130.0, 61.0, 400.0, np.nan, 20.0, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], [88.0, 133.0, 354.0
   ...: , np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], [77.0, 42.0, 212.0, np.nan, 31.0, np.n
   ...: an, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan], [138.0, 64.0, 132.0, np.nan, 49.0, np.nan, np.nan, np.nan, n
   ...: p.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]]}
   ...: 
   ...: avg = {k: np.nanmean(v) for k, v in matches.items()}
   ...: avg
   ...: 
/usr/local/lib/python3.5/site-packages/numpy/lib/nanfunctions.py:703: RuntimeWarning: Mean of empty slice
  warnings.warn("Mean of empty slice", RuntimeWarning)
Out[1]: {('AD', 'MM', 'TT'): nan, ('AD', 'MM', 'VV'): 133.59420289855072}

看看
np.nanmean
。但是当我尝试使用你的
对象
数组时,我得到了
nan
。如果我将数组更改为
dtype=float
,我会得到一个适当的nan-less平均值。你是说这个吗<代码>匹配项中的k,v():平均[k]=np.nanmean(v)。它为所有
v
输出
nan
。询问包含对象数据类型数组列表的类似字典的平均值。如果需要,更改
平均值
功能的
参数。