根据我的理解,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,它是怎么意思的情况?
答案 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
干杯!