Pandas数据透视表显示“ FutureWarning:排序,因为未连接的轴未对齐”

问题描述 投票:1回答:1

我有以下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值。

此结果对我来说很好,我可以使用它,但我不喜欢无人看管警告。关于该怎么办的想法?

python pandas warnings concat
1个回答
0
投票

我能够在大熊猫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包含处理nannp.nanmedian之类的许多处理np.nanmedian的函数,请考虑将其检出。

© www.soinside.com 2019 - 2024. All rights reserved.