我有一个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列的平均值。
答案 0 :(得分:0)
NaN
以外的每一行的平均值,则data.mean(axis=1, skipna=True)
将起作用。 data.mean(axis=0, skipna=True)
或data.describe()
。data.mean().mean()
取所有列的平均值,然后取所有行的平均值(如果每个条目中的NaN
数相同,则等于所有条目的平均值列)。您还可以使用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