Sweetylv 2024-05-10 10:22 采纳率: 66.7%
浏览 79
已结题

关于#python#的问题:进行groupby时,出现datetime64 type的错误提示

出现执行错误提示:
raise TypeError(f"datetime64 type does not support {how} operations")
TypeError: datetime64 type does not support sum operations

# 执行以下代码出现上述提示:
import os  
import xlwings as xw  
import pandas as pd  
app = xw.App(visible = False, add_book = False) 
file_path = '销售表'  
file_list = os.listdir(file_path)  
for i in file_list: 
    if os.path.splitext(i)[1] == '.xlsx':  
        workbook = app.books.open(file_path + '\\' + i)  
        worksheet = workbook.sheets  
        for j in worksheet:    
            values = j.range('A1').expand('table').options(pd.DataFrame).value  
            values['销售利润'] = values['销售利润'].astype('float')
            result = values.groupby('销售区域').sum()
            j.range('J1').value = result['销售利润']
        workbook.save() 
        workbook.close()  
app.quit() 

上述代码实现功能:对多个工作簿中的工作表分别进行分类汇总(如下图所示)

img

请教如何解决该问题?

  • 写回答

3条回答 默认 最新

  • 笑面虎 2024-05-10 10:22
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您提问的目的是解决在使用Python的Pandas库进行groupby操作时,遇到的错误提示,即在尝试对datetime64类型的数据进行sum(求和)操作时引发的TypeError。

    【图片内容】:您上传的图片是一张销售数据表的截图,包含了订单编号、销售区域、下单日期、销售数量、销售单价、销售金额、销售成本和销售利润等列。

    【问题出现原因】:根据您提供的代码和错误信息,问题出现的原因是在执行groupby操作并使用sum函数时,Pandas试图对datetime64类型的数据进行求和,这是不被支持的。在您的数据集中,可能存在datetime64类型的列,比如“下单日期”,而sum函数不能直接应用于这种类型的数据。

    【问题解决方案】:为了解决这个问题,您需要确保groupby操作中不包括datetime64类型的列,或者在进行求和之前将这些列转换为可以求和的类型,如将日期时间转换为表示时间差的整数类型。

    【提供代码】:以下是修改后的代码,它将排除“下单日期”列,并且只对“销售利润”进行求和操作:

    import os  
    import xlwings as xw  
    import pandas as pd  
    app = xw.App(visible=False, add_book=False) 
    file_path = '销售表'  
    file_list = os.listdir(file_path)  
    for i in file_list: 
        if os.path.splitext(i)[1] == '.xlsx':  
            workbook = app.books.open(file_path + '\\' + i)  
            worksheet = workbook.sheets  
            for j in worksheet:    
                values = j.range('A1').expand('table').options(pd.DataFrame).value  
                # 确保销售利润列是浮点数类型
                values['销售利润'] = values['销售利润'].astype('float')
                # 排除下单日期列,只对销售利润进行求和
                result = values.groupby('销售区域')['销售利润'].sum().reset_index()
                j.range('J1').value = result.set_index('销售区域')['销售利润'].to_frame()  # 将结果设置到工作表中
            workbook.save() 
            workbook.close()  
    app.quit() 
    

    【代码运行方式】:您需要在具有Python环境的计算机上运行此代码,且需要安装xlwings和pandas库。您可以在命令行或IDE中运行此脚本。

    【代码预期运行结果】:代码将遍历指定文件夹中的所有Excel文件,对每个文件中的每个工作表进行操作,计算每个销售区域的“销售利润”总和,并将结果输出到工作表的'J1'位置。

    【推荐相关链接】:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月18日
  • 已采纳回答 5月10日
  • 创建了问题 5月10日

悬赏问题

  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
  • ¥15 数字信号处理考试111
  • ¥15 allegro17.2生成bom表是空白的
  • ¥15 请问一下怎么打通CAN通讯
  • ¥20 如何在 rocky9.4 部署 CDH6.3.2?
  • ¥35 navicat将excel中的数据导入mysql出错
  • ¥15 rt-thread线程切换的问题
  • ¥15 高通uboot 打印ubi init err 22
  • ¥15 R语言中lasso回归报错