如何在不考虑NaN值的情况下计算Pandas DataFrame中特定列的mean()

时间:2016-09-02 10:54:26

标签: python pandas dataframe

根据我的理解,axis = 0跨行垂直向下运行,axis = 1跨列水平运行 例如:

In [55]: df1
    Out[55]:
       x  y  z
    0  1  3  8
    1  2  4  NaN
    2  3  5  7
    3  4  6  NaN
    4  5  7  6
    5 NaN 1  9
    6 NaN 9  5

对于列df.mean(axis = 0)的意思是:

    x  3
    y  5
    z  7

但是如果我想按列删除缺失值

   y
0  3
1  4
2  5
3  6
4  7
5  1
6  9

然后我必须使用df.dropna(axis = 1)而不是df.dropna(axis = 0)来获得我想要的输出,但是关于行不是axis = 1,它是怎么意思的情况?

3 个答案:

答案 0 :(得分:0)

来自pandas文档:

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
"Return object with labels on given axis omitted where alternately
any or all of the data are missing"

Parameters: 
    axis : {0 or ‘index’, 1 or ‘columns’}, or tuple/list thereof
    Pass tuple or list to drop on multiple axes

因此,函数的定义方式是axis=1表示列。 如果你想逐行,你可以这样称呼它:

df_dropped = df.dropna(how='all') # drop by row

答案 1 :(得分:0)

dropna()会删除给定轴上的标签,因此df.dropna(axis=1)表示"查看轴1上的标签(即x,y和z)和如果该列中有任何NaN,请删除该标签"

答案 2 :(得分:0)

这是您可以在不降低NaN的情况下计算均值的方法,但仍不要在均值中考虑它们。

1。困难的方式

val = df['y']
val[~val.isnull()].mean()

2。简便方法

df['y'].mean()

DataFrame.mean()函数从计算中隐式排除“ NaN”值。您不需要显式处理它。可以使用默认值为skipna的参数skina=True来实现。

如果您明确希望考虑列的全长,而不考虑NaN值的存在,则可以如下使用set skipna=False

df['y'].mean(skipna=False)

参考官方文档始终是一个好习惯。 Refer docs for DataFrame.mean() here

干杯!