轴参数的含义在pd.DataFrame.all中切换

时间:2014-10-10 08:49:21

标签: python pandas dataframe

我有以下数据框:

>>> df = pd.DataFrame([[True, np.nan, False],[True,np.nan,False],[True,np.nan,False]])
>>> df
      0   1      2
0  True NaN  False
1  True NaN  False
2  True NaN  False

根据docs,执行df.all(axis=1, skipna=True)对应于检查列中是否所有值都是真的,因此我希望它提供TrueTrue,{{ 1}},但它提供FalseFalseFalse。似乎轴的含义已被翻转,即轴= 0用于列式。

这似乎与False中轴的含义相矛盾,例如,

DataFrame.dropna

以及np.delete

这是故意的吗?如果是这样,为什么?

2 个答案:

答案 0 :(得分:1)

我认为这是文档中的错误,因为此方法会调用numpy.all ,如果您比较输出它们是相同的:

In [211]:

np.all(df,axis=0)
Out[211]:
array([True, nan, False], dtype=object)
In [212]:

np.all(df, axis=1)
Out[212]:
array([False, False, False], dtype=object)

dropnanp.delete同意输出:

In [213]:

df.dropna(axis=1)
Out[213]:
      0      2
0  True  False
1  True  False
2  True  False
In [222]:

np.delete(df.values, 1,axis=1)
Out[222]:
array([[True, False],
       [True, False],
       [True, False]], dtype=object)

答案 1 :(得分:1)

我同意它并不总是非常直观,但我认为行为是一致的。

axis=0在r0ws上工作,axis=1在整个合作列中工作。

因此,df.all(axis=1, skipna=True)会返回False, False, False,因为它会跨所有列执行操作(此处返回每行all(True, True, False)的结果)。同时,df.all(axis=0, skipna=True)向下查看行(依次为每列)。只有第2列中的行包含False值,因此结果为。

同样,dropna(axis=1)delete(axis=1)会对列启动操作(即查看每列以查看是否应删除或删除列)。第0列和第2列不包含任何NaN值,因此会保留,而第1列会消失。