我有以下数据框:
>>> 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)
对应于检查列中是否所有值都是真的,因此我希望它提供True
,True
,{{ 1}},但它提供False
,False
,False
。似乎轴的含义已被翻转,即轴= 0用于列式。
这似乎与False
中轴的含义相矛盾,例如,
DataFrame.dropna
以及np.delete
。
答案 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)
dropna
和np.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列会消失。