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

电玩女神 2023-09-27 13:24 188阅读 0赞

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

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

一、问题描述

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

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

  1. data.groupby('性别')

报错为:

  1. Output exceeds the size limit. Open the full output data in a text editor
  2. ---------------------------------------------------------------------------
  3. ValueError Traceback (most recent call last)
  4. Cell In [11], line 1
  5. ----> 1 data.groupby('性别')
  6. 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)
  7. 7716 axis = self._get_axis_number(axis)
  8. 7718 # https://github.com/python/mypy/issues/7642
  9. 7719 # error: Argument "squeeze" to "DataFrameGroupBy" has incompatible type
  10. 7720 # "Union[bool, NoDefault]"; expected "bool"
  11. -> 7721 return DataFrameGroupBy(
  12. 7722 obj=self,
  13. 7723 keys=by,
  14. 7724 axis=axis,
  15. 7725 level=level,
  16. 7726 as_index=as_index,
  17. 7727 sort=sort,
  18. 7728 group_keys=group_keys,
  19. 7729 squeeze=squeeze, # type: ignore[arg-type]
  20. 7730 observed=observed,
  21. 7731 dropna=dropna,
  22. 7732 )
  23. 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)
  24. 879 if grouper is None:
  25. ...
  26. --> 877 raise ValueError(f"Grouper for '{
  27. name}' not 1-dimensional")
  28. 878 exclusions.add(name)
  29. 879 elif obj._is_level_reference(gpr, axis=axis):
  30. ValueError: Grouper for '性别' not 1-dimensional

二、问题分析

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

2.1 构建的DataFrame两列列名一样

例如:

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

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

2.2 情况2

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

这个DataFrame进行groupby也会报错:

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

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

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

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

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

三、问题解决

我们把列名改成1维的:

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

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

发表评论

表情:
评论列表 (有 0 条评论,188人围观)

还没有评论,来说两句吧...

相关阅读

    相关 demension(dimensional)

    DellDimension4600重装了XP以后,连不上网了? 你的机器上的MODEM驱动和有关的软件装了么? 没有正确安装到本机的MODEM,和没有正确的安装有关的宽