Pandas 获取列的平均值/均值

281

我无法在pandas中获取一列的平均值。我有一个数据框。我尝试以下两种方法都无法给出weight列的平均值。

>>> allDF 
         ID           birthyear  weight
0        619040       1962       0.1231231
1        600161       1963       0.981742
2      25602033       1963       1.3123124     
3        624870       1987       0.94212

以下返回多个值,而不是一个:

allDF[['weight']].mean(axis=1)

那么这样做也可以:

allDF.groupby('weight').mean()

1
df.groupby('weight') wasn't what you wanted, because it split the df into separate columns, each with a distinct value of weight. Instead of just df['weight'].mean() - smci
allDF.weight.mean(): - DataFramed
12个回答

426
如果你只需要得到weight列的均值,选择这一列(它是一个Series)并调用.mean()函数即可:
In [479]: df
Out[479]: 
         ID  birthyear    weight
0    619040       1962  0.123123
1    600161       1963  0.981742
2  25602033       1963  1.312312
3    624870       1987  0.942120

In [480]: df.loc[:, 'weight'].mean()
Out[480]: 0.83982437500000007

6
如果我想要获取每一列的平均值,应该怎么做? - Chris
6
@Chris df.describe() 的翻译:描述数据框的统计信息,包括计数、均值、标准差、最小值、25%位数、中位数、75%位数和最大值。 - Abhishek Poojary
5
df.mean()会计算每列的均值,并将结果返回为一个序列,序列中包含每列的权重。 - emschorsch

43

尝试使用 df.mean(axis=0)axis=0 参数计算数据框的列均值,因此结果是列均值。而 axis=1 表示行均值,因此会得到多个值。


这适用于大多数列,但会忽略任何日期时间列。 - user74696c

23

请尝试运行print (df.describe()),它可以帮助您获得数据框的总体描述。希望对您有所帮助。


5
在Jupyter Notebooks中使用display(df.describe())更好,因为ipython的display提供格式化的HTML而不是ASCII,这更加视觉上有用/美观。 - Zhanwen Chen

17

每列在 df 中的平均值:

    A   B   C
0   5   3   8
1   5   3   9
2   8   4   9

df.mean()

A    6.000000
B    3.333333
C    8.666667
dtype: float64

如果你想要所有列的平均值:

df.stack().mean()
6.0

15

你可以使用

df.describe() 

您将获得数据帧的基本统计信息,如果要获取特定列的平均值,可以使用

df["columnname"].mean()

3
这是之前提到的答案的副本。 - Mehdi Boukhechba

10

您还可以使用点表示法(也称属性访问)访问列,然后计算其平均值:

df.your_column_name.mean()

尽可能使用 df.loc[:, 'your_column_name'] - questionto42
@questionto42 为什么要这样做?为什么使用 df.loc[:, 'weight'].mean() 而不是 df['weight'].mean()? - sparktime12
1
@sparktime12,你在这里写的两种样式都是相同的,速度也一样。我只是模糊地记得最佳实践是使用loc,因为它后来被标准化,适用于您想要查询的任何内容,而快捷方式会模糊数据框过滤器的视图。请参阅在Pandas/Python中使用loc和方括号进行列过滤有什么区别? - questionto42

6

您可以使用以下任何一条语句:

numpy.mean(df['col_name'])
# or
df['col_name'].mean()

请在您的答案中添加适当的注释,以丰富其内容。否则可能会被标记为删除。 - Don

4
请注意,它需要首先是数字数据类型。
 import pandas as pd
 df['column'] = pd.to_numeric(df['column'], errors='coerce')

接下来,使用describe()函数在一个列或所有数字列上找到平均值。

df['column'].mean()
df.describe()

描述结果的示例:

describe 的结果:

          column 
count    62.000000 
mean     84.678548 
std     216.694615 
min      13.100000 
25%      27.012500 
50%      41.220000 
75%      70.817500 
max    1666.860000

尽可能使用df.loc [:,'your_column_name']。 - questionto42

3
你可以使用方法aggaggregate):
df.agg('mean')

可以应用多个统计数据:

df.agg(['mean', 'max', 'min'])

3

另外,如果你想在找到平均值之后获得round值。

#Create a DataFrame
df1 = {
    'Subject':['semester1','semester2','semester3','semester4','semester1',
               'semester2','semester3'],
   'Score':[62.73,47.76,55.61,74.67,31.55,77.31,85.47]}
df1 = pd.DataFrame(df1,columns=['Subject','Score'])

rounded_mean = round(df1['Score'].mean()) # specified nothing as decimal place
print(rounded_mean) # 62

rounded_mean_decimal_0 = round(df1['Score'].mean(), 0) # specified decimal place as 0
print(rounded_mean_decimal_0) # 62.0

rounded_mean_decimal_1 = round(df1['Score'].mean(), 1) # specified decimal place as 1
print(rounded_mean_decimal_1) # 62.2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接