我的代码(摘自Python Data Science Handbook(O'Reilly)):
- 完全披露:在撰写本文时,这本书仍处于早期发行阶段,这意味着它仍然未经编辑,处于原始状态。
import numpy as np
import pandas as pd
import seaborn as sns
titanic = sns.load_dataset('titanic')
titanic.pivot_table('survived', index='sex', columns='class')
结果是:
但是,如果我现在尝试使用margins
关键字添加总计,则会发生以下错误:
titanic.pivot_table('survived', index='sex', columns='class', margins=True)
TypeError: cannot insert an item into a CategoricalIndex that is not already an existing category
知道是什么导致的吗
版本信息:
- 简体中文
- pandas 0.16.2
- numpy 1.9.2
2条答案
按热度按时间jum4pzuy1#
这似乎是由于Pandas0.15和0.16之间的变化所致。在以前的版本中,titanic数据集具有以下dtype:
关于Pandas:
有几个列被自动转换为分类列,这就产生了这个bug。该书目前尚未出版和编辑;我一定会用最新的版本进行测试,并在发布之前修复这些类型的错误。
现在,这里有一个解决方案:
编辑:我把这个作为一个问题提交给了Pandas项目:https://github.com/pydata/pandas/issues/10989
mwecs4sa2#
pivot_tables创建一个新的DataFrame,因此需要一个新的变量new_var = titanic.pivot_table(...)
(...,margins = True)是每一列和每一行的平均值(bool或int)
只需del(...,margins = True)并使用.aggfunc = sum)