axis = 0似乎在sum()和dropna()中表现不同

时间:2018-03-31 11:23:16

标签: python pandas dataframe sum

通过阅读pandas文档和一个很好的问答(What does axis in pandas mean?),我原本期望axis = 0总是表示相对于列。当我使用sum()时,这适用于我,但是当我使用dropna()调用时,它会相反。

当我有这样的数据框时:

raw_data = {'column1': [42,13, np.nan, np.nan],
        'column2': [4,12, np.nan, np.nan],
        'column3': [25,61, np.nan, np.nan]}

看起来像这样:

   column1  column2  column3
0     42.0      4.0     25.0
1     13.0     12.0     61.0
2      NaN      NaN      NaN
3      NaN      NaN      NaN

我可以打印各列的总和,其中axis = 0。这个:

df = pd.DataFrame(raw_data )
print(df.sum(axis=0))

给出输出:

column1    55.0
column2    16.0
column3    86.0

当我尝试从轴= 0的数据帧中删除值时,这应该再次与列*相关。但是当我这样做时:

dfclear=df.dropna(axis=0,how='all')
print(dfclear)

我得到了输出:

column1  column2  column3
0     42.0      4.0     25.0
1     13.0     12.0     61.0

我所期望的以下(我用轴= 1得到):

   column1  column2  column3
0     42.0      4.0     25.0
1     13.0     12.0     61.0
2      NaN      NaN      NaN
3      NaN      NaN      NaN

所以在我看来,sum()和dropna()

之间的轴行为不同

这里有什么我想念的吗?

* https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html

3 个答案:

答案 0 :(得分:0)

我认为答案是正确的:

print(df)

产生以下输出:

   column1  column2  column3
0     42.0      4.0     25.0
1     13.0     12.0     61.0
2      NaN      NaN      NaN
3      NaN      NaN      NaN

dfclear=df.dropna(axis=0,how='all')
print(dfclear)

产生以下输出:

   column1  column2  column3
0     42.0      4.0     25.0
1     13.0     12.0     61.0

来自Pandas文档示例说明:

  

删除所有元素都为nan的行(没有行到   下降,所以df保持不变)

答案 1 :(得分:0)

来自docstring的

In [41]: df.dropna?
Signature: df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
Docstring:
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
...

如果您不确定轴是什么,请使用以下方法:

In [39]: df.dropna(axis='index', how='all')
Out[39]:
   column1  column2  column3
0     42.0      4.0     25.0
1     13.0     12.0     61.0

In [40]: df.dropna(axis='columns', how='all')
Out[40]:
   column1  column2  column3
0     42.0      4.0     25.0
1     13.0     12.0     61.0
2      NaN      NaN      NaN
3      NaN      NaN      NaN

答案 2 :(得分:0)

请记住,熊猫移动也具有相反的直观轴含义,其中0表示原始,1表示按列。

我想他们需要在文档中的某个地方解决这些问题和其他类似问题