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

目录:ValueError: Grouper for 'Code' not 1-dimensional解决

  • 一、问题描述
  • 二、问题分析
    • 2.1 构建的DataFrame两列列名一样
    • 2.2 情况2
  • 三、问题解决

一、问题描述

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

【Python】ValueError: Grouper for ‘Code‘ not 1-dimensional_第1张图片
但是在分组时,出现报错:

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 = ['姓名', '性别', '班级', '身高']

此时不再报错:
【Python】ValueError: Grouper for ‘Code‘ not 1-dimensional_第2张图片

你可能感兴趣的:(Python3常用到的函数总结,python,pandas)