我有以下DataFrame:
df = pd.DataFrame({'category':['A', 'B', 'C', 'C'],
'bar':[2, 5, float('nan'), float('nan')]})
然后我只有一行代码,在这里我试图在DataFrame的一列上应用两个聚合函数,并按另一列中的值分组:
df.pivot_table('bar', 'category', aggfunc=['median', 'count'])
由于某种原因,它给我以下警告:
FutureWarning:排序,因为非并置轴未对齐。熊猫的未来版本将更改为默认情况下不排序。至接受将来的行为,传递“ sort = False”。保留当前行为并取消警告,通过'sort = True'。
据我对这个警告的了解,它涉及“ concat()”或“ append()”方法。我没有调用这两个方法,因此我只能假定在“ pivot_table()”方法内部的某个位置隐式使用了两者之一。我很乐意通过“ sort”参数来使警告静音,但是如果隐式调用该方法,我看不到这样做的方法。
我在此示例上进行了一些测试,看起来警告仅在满足以下所有三个条件时才会出现:
1)汇总的值中至少有一组完全由缺失值组成;
2)至少有两个聚合函数;
3)聚合函数之一是“ count()”。
目前,我的工作原理是,两个聚合函数在生成的数据透视表应具有多少行上无法达成共识。 “ count()”函数在所有由完全缺失的值组成的组中放入零。但是其他函数完全忽略了此类组,因此当不存在“ count()”时,数据透视表中仅会缺少相应的行。但是,如果存在“ count()”,它将强制其他函数不要忽略这些组,并在各个单元格中创建NaN值。
此结果对我来说很好,我可以使用它,但我不喜欢无人看管警告。关于该怎么办的想法?
我能够在大熊猫0.25.1上复制该问题,此减弱与pandas.core.reshape.pivot.py
有关,其中包括以下语句
# line 56
return concat(pieces, keys=keys, axis=1)
此concat
发出警告,pieces
是数据帧的列表,其中各列与参数aggfunc
的每个函数相关,将发生以下情况:
pieces[0]
# bar
# category
# A 2.0
# B 5.0
pieces[1]
# bar
# category
# A 1
# B 1
# C 0
由于pieces[0]
和pieces[1]
具有不同的索引,所以熊猫需要对数据帧进行排序以在值之间进行匹配。
1.0.1
中不会发生此问题。如果您不希望显示警告,请添加参数dropna=False
,以便NaN
列都包含在aggfunction中。
df.pivot_table('bar', 'category', aggfunc=['median', 'count'], dropna=False)
[请注意,有些函子不能与nan值一起使用,numpy包含处理nan
和np.nanmedian
之类的许多处理np.nanmedian
的函数,请考虑将其检出。