【Python】ValueError: Grouper for ‘Code‘ not 1-dimensional

一、问题描述

在我进行pandas的groupby分组的时候,我们的数据集如下:

在这里插入图片描述
但是在分组时,出现报错:

data.groupby('性别')

报错为:

Output exceeds the size limit. Open the full output data in a text editor
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In [11], line 1
----> 1 data.groupby('性别')

File d:\Anaconda\envs\PyTorch\lib\site-packages\pandas\core\frame.py:7721, in DataFrame.groupby(self, by, axis, level, as_index, sort, group_keys, squeeze, observed, dropna)
   7716 axis = self._get_axis_number(axis)
   7718 # https://github.com/python/mypy/issues/7642
   7719 # error: Argument "squeeze" to "DataFrameGroupBy" has incompatible type
   7720 # "Union[bool, NoDefault]"; expected "bool"
-> 7721 return DataFrameGroupBy(
   7722     obj=self,
   7723     keys=by,
   7724     axis=axis,
   7725     level=level,
   7726     as_index=as_index,
   7727     sort=sort,
   7728     group_keys=group_keys,
   7729     squeeze=squeeze,  # type: ignore[arg-type]
   7730     observed=observed,
   7731     dropna=dropna,
   7732 )

File d:\Anaconda\envs\PyTorch\lib\site-packages\pandas\core\groupby\groupby.py:882, in GroupBy.__init__(self, obj, keys, axis, level, grouper, exclusions, selection, as_index, sort, group_keys, squeeze, observed, mutated, dropna)
    879 if grouper is None:
...
--> 877         raise ValueError(f"Grouper for '{name}' not 1-dimensional")
    878     exclusions.add(name)
    879 elif obj._is_level_reference(gpr, axis=axis):

ValueError: Grouper for '性别' not 1-dimensional

二、问题分析

跑出这种错误有两种情况:

2.1 构建的DataFrame两列列名一样

例如:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(6).reshape(3,2),columns=['bar','bar'])
df
   bar	bar
0	0	1
1	2	3
2	4	5

这种情况比较好解决,就是将列名更改成不一样就行。

2.2 情况2

df.columns = [['A','B']]
df
	A	B
0	0	1
1	2	3
2	4	5

这个DataFrame进行groupby也会报错:

df.groupby('A')
ValueError: Grouper for 'bar' not 1-dimensional

这个查看df的columns就知道了:

df.columns
MultiIndex(levels=[['A', 'B']],labels=[[0, 1]])

可以看到labels=[[0,1]]是一个二维的,只需要重新索引为一维即可:

df.columns = ['A','B']
df.groupby('A')
<pandas.core.groupby.groupby.DataFrameGroupBy object at 0x000002B3A74F2828>

三、问题解决

我们把列名改成1维的:

lst2 = ['姓名', '性别', '班级', '身高']

此时不再报错:
在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅途中的宽~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值