Pandas用category处理透视表中的NaN

2024-05-16 06:12:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Categorical数据类型创建多个透视表,然后将它们合并到一个大的pivot表/数据帧中。在

但是,在某些情况下,我在执行合并时得到NaN,当我试图fillna(0)时,我得到以下错误:ValueError: fill value must be in categories

pv1 = pd.PivotTable(df, index='Category', values='Sales', aggfunc='sum')    
pv2 = pd.PivotTable(df, index='Category', values='Quantity', aggfunc='sum')    
chart = pv1.merge(pv2, on='Category', how='outer').fillna(0)

实际产量:

^{pr2}$

期望输出:

 Category   Sales  Quantity
 Boxes      100    0
 Staples    20     10
 Paper      0      20

Tags: dfindexquantitypd数据类型valuessumsales
2条回答

最直接的方法是定义要对其执行fillna()的列,然后只对这些列执行该操作(基本上不包括categorical列)。在

fill_cols = ['Sales','Quantity'] df[fill_cols] = df[fill_cols].fillna(0)

也许您应该尝试在最终输出上使用fillna,而不是中间步骤。这非常有效:

In [120]: df
Out[120]: 
  Category  Sales  Quantity
0    Boxes  100.0       NaN
1  Staples   20.0      10.0
2    Paper    NaN      20.0

In [122]: df.fillna(0, inplace=True)

In [123]: df
Out[123]: 
  Category  Sales  Quantity
0    Boxes  100.0       0.0
1  Staples   20.0      10.0
2    Paper    0.0      20.0

相关问题 更多 >