python - 将整个数据框中的 NaN 值替换为其他值的平均值

标签 python pandas numpy dataframe nan

我有几个 DataFrame(DataFrame 具有相同的索引和列结构)。问题是这些数据框中存在 NaN 值。

我想用其他 DataFrame 对应值的平均值替换这些 NaN 值。

例如,让我们看一下 3 个数据帧。

DataFrame1 与 1:M2 NaN:

   M1   M2    M3        
0  1    1     2  
1  8   NaN    9 
2  4    2     7       
3  9    6     3  

DataFrame 2 在 0:M3 处具有 NaN 值:

   M1   M2    M3        
0  2    3    NaN  
1  1    1     6 
2  1    2     9       
3  4    6     2

数据帧3:

   M1   M2    M3        
0  1    4     2  
1  2    9     1 
2  1    6     5       
3  1    NaN     4

因此,我们将第一个 DataFrame 中的 NaN 替换为 5 (9+1)/2。第二个 NaN 应替换为 2,因为 (2+2)/2,第三个 NaN 应替换为 6,依此类推。

有什么好的、优雅的方法吗?

最佳答案

这是使用numpy.nanmean的一种方法。

avg = np.nanmean([df1.values, df2.values, df3.values], axis=0)

for df in [df1, df2, df3]:
    df[df.isnull()] = avg
    df = df.astype(int)

注意:由于 np.nanfloat,我们显式转换回 int

关于python - 将整个数据框中的 NaN 值替换为其他值的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49735028/

相关文章:

python - 使用 pandas 将数据帧从长转换为宽 - 单行输出

multithreading - cython.parallel : how to initialise thread-local ndarray buffer?

python - 使用多索引创建一个包含列名称的新 csv 文件

python - 使用 NumExpr : An analysis 提高 NumPy 代码的运行时间

python - sklearn train_test_split - ValueError : Found input variables with inconsistent numbers of samples

python - Tornado '@run_on_executor' 正在阻塞

Python TraitsUI - 如何控制 'String' 特征编辑器/ View 的滚动条位置

python - 从 DataFrame 列构造 Series 时丢失值

python - 为什么 sklearn 在 CPU 上比 Theano 在 GPU 上更快?

python - 将字符串中的分隔数据转换为单列中的值