鱼C论坛

 找回密码
 立即注册
查看: 2104|回复: 4

[已解决]dataframe使用groupby出现以下异常

[复制链接]
发表于 2023-8-13 08:04:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import pandas as pd
  2. buycount = pd.DataFrame([['苹果',9000],['香蕉',4000],['梨子',2000],['菠萝',3000]],columns=['种类','购入数量'])
  3. data = [['苹果','2022-02-09',300],
  4.         ['苹果','2022-02-25',150],
  5.         ['苹果','2022-09-05',550],
  6.         ['苹果','2022-09-29',154],
  7.         ['苹果','2023-01-29',354],
  8.         ['苹果','2023-04-19',950],
  9.         ['菠萝','2022-09-29',250],
  10.         ['梨子','2023-09-20',350],
  11.         ['香蕉','2022-07-29',650],
  12.         ['菠萝','2023-12-22',900]]
  13. columns = ['种类','时间','卖出数量']
  14. df1 = pd.DataFrame(data=data,columns=columns)
  15. # print(df1)

  16. # 将'date'列转换为日期时间类型
  17. df1['时间'] = pd.to_datetime(df1['时间'])
  18. # df1['时间'] = df1['时间'].dt.strftime('%Y-%m-%d')
  19. # df1['时间'] = df1['时间'].astype(int)
  20. # 按年份和月份分组
  21. df1_grouped = df1.groupby([df1['时间'].dt.year, df1['时间'].dt.month]).sum()
  22. # 打印结果
  23. print(df1_grouped)
复制代码

Traceback (most recent call last):
  File "C:\Users\K\PycharmProjects\pythonProject\666.py", line 22, in <module>
    df1_grouped = df1.groupby([df1['时间'].dt.year, df1['时间'].dt.month]).sum()
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python\Python311\Lib\site-packages\pandas\core\groupby\groupby.py", line 2263, in sum
    result = self._agg_general(
             ^^^^^^^^^^^^^^^^^^
  File "C:\Python\Python311\Lib\site-packages\pandas\core\groupby\groupby.py", line 1422, in _agg_general
    result = self._cython_agg_general(
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python\Python311\Lib\site-packages\pandas\core\groupby\groupby.py", line 1507, in _cython_agg_general
    new_mgr = data.grouped_reduce(array_func)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python\Python311\Lib\site-packages\pandas\core\internals\managers.py", line 1506, in grouped_reduce
    applied = blk.apply(func)
              ^^^^^^^^^^^^^^^
  File "C:\Python\Python311\Lib\site-packages\pandas\core\internals\blocks.py", line 329, in apply
    result = func(self.values, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python\Python311\Lib\site-packages\pandas\core\groupby\groupby.py", line 1490, in array_func
    result = self.grouper._cython_operation(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python\Python311\Lib\site-packages\pandas\core\groupby\ops.py", line 959, in _cython_operation
    return cy_op.cython_operation(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python\Python311\Lib\site-packages\pandas\core\groupby\ops.py", line 645, in cython_operation
    self._disallow_invalid_ops(dtype, is_numeric)
  File "C:\Python\Python311\Lib\site-packages\pandas\core\groupby\ops.py", line 257, in _disallow_invalid_ops
    raise TypeError(f"datetime64 type does not support {how} operations")
TypeError: datetime64 type does not support sum operations
最佳答案
2023-8-13 10:20:40
hahadaxiao 发表于 2023-8-13 08:06
pycharm还是出现一样的异常

代码是没有问题的,看看你的库版本对不对吧。实再不行重新安装下库,并指定下版本。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-13 08:04:57 | 显示全部楼层
问题原因是尝试对datetime64类型的列进行求和操作,而datetime64类型不支持求和操作。

解决方法是将需要求和的列转换为数值类型或者整数类型,然后再进行求和操作。

在这个案例中,需要将'卖出数量'列转换为整数类型,然后再进行求和操作。可以使用astype()方法将列转换为整数类型。

以下是修改后的代码:

  1. import pandas as pd

  2. buycount = pd.DataFrame([['苹果',9000],['香蕉',4000],['梨子',2000],['菠萝',3000]],columns=['种类','购入数量'])
  3. data = [['苹果','2022-02-09',300],
  4.          ['苹果','2022-02-25',150],
  5.          ['苹果','2022-09-05',550],
  6.          ['苹果','2022-09-29',154],
  7.          ['苹果','2023-01-29',354],
  8.          ['苹果','2023-04-19',950],
  9.          ['菠萝','2022-09-29',250],
  10.          ['梨子','2023-09-20',350],
  11.          ['香蕉','2022-07-29',650],
  12.          ['菠萝','2023-12-22',900]]
  13. columns = ['种类','时间','卖出数量']
  14. df1 = pd.DataFrame(data=data,columns=columns)

  15. # 将'date'列转换为日期时间类型
  16. df1['时间'] = pd.to_datetime(df1['时间'])

  17. # 将'卖出数量'列转换为整数类型
  18. df1['卖出数量'] = df1['卖出数量'].astype(int)

  19. # 按年份和月份分组并求和
  20. df1_grouped = df1.groupby([df1['时间'].dt.year, df1['时间'].dt.month]).sum()

  21. # 打印结果
  22. print(df1_grouped)
复制代码


运行以上代码,即可得到按年份和月份分组后的求和结果。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-13 08:06:54 | 显示全部楼层
isdkz 发表于 2023-8-13 08:04
问题原因是尝试对datetime64类型的列进行求和操作,而datetime64类型不支持求和操作。

解决方法是将需要 ...

pycharm还是出现一样的异常
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-13 09:19:24 | 显示全部楼层
加多一个指定求和的数据列,即可
  1. >>> data = [['苹果','2022-02-09',300],
  2.         ['苹果','2022-02-25',150],
  3.         ['苹果','2022-09-05',550],
  4.         ['苹果','2022-09-29',154],
  5.         ['苹果','2023-01-29',354],
  6.         ['苹果','2023-04-19',950],
  7.         ['菠萝','2022-09-29',250],
  8.         ['梨子','2023-09-20',350],
  9.         ['香蕉','2022-07-29',650],
  10.         ['菠萝','2023-12-22',900]]
  11. >>> columns = ['种类','时间','卖出数量']
  12. >>> import pandas as pd
  13. >>> df = pd.DataFrame(data, columns=columns)
  14. >>> df
  15.    种类          时间  卖出数量
  16. 0  苹果  2022-02-09   300
  17. 1  苹果  2022-02-25   150
  18. 2  苹果  2022-09-05   550
  19. 3  苹果  2022-09-29   154
  20. 4  苹果  2023-01-29   354
  21. 5  苹果  2023-04-19   950
  22. 6  菠萝  2022-09-29   250
  23. 7  梨子  2023-09-20   350
  24. 8  香蕉  2022-07-29   650
  25. 9  菠萝  2023-12-22   900
  26. >>> df['时间'] = pd.to_datetime(df['时间'])
  27. >>> df.dtypes
  28. 种类              object
  29. 时间      datetime64[ns]
  30. 卖出数量             int64
  31. dtype: object
  32. >>> df.groupby(df['时间'].dt.year)['卖出数量'].sum()
  33. 时间
  34. 2022    2054
  35. 2023    2554
  36. Name: 卖出数量, dtype: int64
  37. >>> df.groupby([df['时间'].dt.year, df['时间'].dt.month])['卖出数量'].sum()
  38. 时间    时间
  39. 2022  2     450
  40.       7     650
  41.       9     954
  42. 2023  1     354
  43.       4     950
  44.       9     350
  45.       12    900
  46. Name: 卖出数量, dtype: int64
  47. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-13 10:20:40 | 显示全部楼层    本楼为最佳答案   
hahadaxiao 发表于 2023-8-13 08:06
pycharm还是出现一样的异常

代码是没有问题的,看看你的库版本对不对吧。实再不行重新安装下库,并指定下版本。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 12:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表