0

我正在使用Categoricaldtype 创建多个数据透视表,然后将它们合并到一个大数据透视表/数据框中。

但是,在某些情况下,我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)

实际输出:

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

期望的输出:

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

2 回答 2

1

最直接的方法是定义我想要执行的列fillna(),然后仅在这些列上执行它(基本上排除categorical列。

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

于 2018-07-12T16:19:12.697 回答
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
于 2018-07-12T14:51:41.197 回答