Python 如何在numpy数组中用0替换nan来计算平均值?
如何在以下数据集中用零替换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,
匹配
是下面给出的数据集:
# 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
。询问包含对象数据类型数组列表的类似字典的平均值。如果需要,更改平均值
功能的轴
参数。