我正在使用Categorical
dtype创建多个数据透视表,然后将它们合并到一个大的数据透视表/数据框中。
但是,在某些情况下,执行合并时会得到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
答案 0 :(得分: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
答案 1 :(得分:0)
最简单的方法是定义要在其上进行fillna()
的列,然后仅在这些列上执行(基本上排除categorical
列。
fill_cols = ['Sales','Quantity']
df[fill_cols] = df[fill_cols].fillna(0)