Python 在交叉表操作中,同时设置colnames=[None]和margins=True会导致错误

Python 在交叉表操作中,同时设置colnames=[None]和margins=True会导致错误,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个由两个分类变量组成的简单数据框架。这可以简化如下: tempDF = pd.DataFrame({ 'species': ["cat","dog","dog","dog","cat","cat","cat","dog","cat","cat"], 'gender': ["female","female","female","male","male","female","female","female","male","female"]})

我有一个由两个分类变量组成的简单数据框架。这可以简化如下:

tempDF = pd.DataFrame({ 'species': ["cat","dog","dog","dog","cat","cat","cat","dog","cat","cat"],
                        'gender':  ["female","female","female","male","male","female","female","female","male","female"]})

print(tempDF)

       gender species
    0  female     cat
    1  female     dog
    2  female     dog
    3    male     dog
    4    male     cat
    5  female     cat
    6  female     cat
    7  female     dog
    8    male     cat
    9  female     cat
tempTable = pd.crosstab(tempDF['species'],tempDF['gender'])

gender   female  male
species              
cat           4     2
dog           3     1
我可以创建一个简单的交叉表格,如下所示:

tempDF = pd.DataFrame({ 'species': ["cat","dog","dog","dog","cat","cat","cat","dog","cat","cat"],
                        'gender':  ["female","female","female","male","male","female","female","female","male","female"]})

print(tempDF)

       gender species
    0  female     cat
    1  female     dog
    2  female     dog
    3    male     dog
    4    male     cat
    5  female     cat
    6  female     cat
    7  female     dog
    8    male     cat
    9  female     cat
tempTable = pd.crosstab(tempDF['species'],tempDF['gender'])

gender   female  male
species              
cat           4     2
dog           3     1
但是,我希望种类是列中的变量,而不是索引,以便可以重置索引:

tempTable = tempTable.reset_index(drop=False)

gender species  female  male
0          cat       4     2
1          dog       3     1
但现在看来,该索引被标记为“性别”,这令人困惑,因为“男性”和“女性”已经是每一列的标题。事实上,“性别”一词实际上似乎是列标题的名称,可以设置为任何内容,包括无:

tempTable.columns.name = None

  species  female  male
0     cat       4     2
1     dog       3     1
这正是我想要的

事实上,这可以在初始交叉表阶段更有效地完成:

tempTable = pd.crosstab(tempDF['species'],tempDF['gender'],colnames=[None])

         female  male
species              
cat           4     2
dog           3     1
(注意,似乎不需要通过方括号中的列表来产生任何影响。但无论如何。)

如果我还希望在交叉表格中包含边距,则会出现问题:

tempTable = pd.crosstab(tempDF['species'],tempDF['gender'],colnames=[None],margins=True)
这一次,我得到:

KeyError: 'Level None not found'
包括colnames=[None]或margins=True都可以。但是为什么include margins=True应该与colnames=[None]交互以产生错误呢?有没有办法将列名设置为“无”并在同一命令中包含边距?还是我必须完成上面列出的所有步骤