取熊猫数据框中的多列的平均值

时间:2020-06-16 14:27:29

标签: python pandas mean

我有一个4列的pandas数据框,这是一件设备将数据导出到csv中的方式。我当前的代码将csv导入到数据框中,将标题添加到列中,然后在其上运行一些代码以将其转换为我们所需的代码。这是代码的主要部分:

def data_an(info):
    data = pd.read_csv(info, usecols=[0, 1, 2, 3], names=["a", "b", "c", "d"])
    data = data.replace(0, np.NaN)
    return(data.mean(), data.count())

print(data_an('output.csv'))

这将是输出:

a    19.381846
b    18.515209
c    18.401317
d    18.849287
dtype: float64, a    10675
b    11126
c     6866
d     5496
dtype: int64

我想知道如何能够同时取a,b,c和d的平均值,因此求和所有4列的值,然后取所有4列的平均值。

1 个答案:

答案 0 :(得分:0)

使用熊猫

  • 如果您想取除NaN以外的每一行的平均值,则data.mean(axis=1, skipna=True)将起作用。
  • 如果要获取每列的平均值,请使用data.mean(axis=0, skipna=True)data.describe()
  • 如果要获取所有条目的平均值,请使用data.mean().mean()取所有列的平均值,然后取所有行的平均值(如果每个条目中的NaN数相同,则等于所有条目的平均值列)。

使用numpy

您还可以使用data.to_numpy(np.float64)将数据转换为numpy数组(如果您的数据不是数字,则会引发错误)并使用常规的numpy操作。即使数据列中有不同数量的np.nanmean(data.to_numpy(np.float64))条目,NaN也会给出正确的结果。

示例

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: df = pd.DataFrame({'a': [1, 2, 3], 'b': [1, 2, 3]})

In [4]: df
Out[4]:
   a  b
0  1  1
1  2  2
2  3  3

In [5]: df.to_numpy(np.float64)
Out[5]:
array([[1., 1.],
       [2., 2.],
       [3., 3.]])

In [6]: df.to_numpy(np.float64).mean(axis=1)
Out[6]: array([1., 2., 3.])

In [7]: df.to_numpy(np.float64).mean(axis=0)
Out[7]: array([2., 2.])

In [8]: df.to_numpy(np.float64).mean()
Out[8]: 2.0