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]交互以产生错误呢?有没有办法将列名设置为“无”并在同一命令中包含边距?还是我必须完成上面列出的所有步骤