0

我有一个代码,我将 txt 转换为 xlsx,然后添加一个包含公式的列,然后我想在不同的工作表中创建一个包含该信息的数据透视表。该代码可以正常工作,但它会创建并清空工作表,而不是包含信息的工作表。

所以代码看起来像这样:

import numpy as np
import openpyxl

#Transforming our txt to xlsx
path = r"C:\Users\roslber\Desktop\Codes\Python\Projects\Automated routes.xlsx"
rssdata= pd.read_csv("dwp.txt", sep="\t")
rssdata.to_excel(path, index= None , header= True)                        

#Writing the formula column
wb = openpyxl.load_workbook(filename=path)
ws1 = wb["Sheet1"]  
ws1["AC1"] = "CF Weight"                                                      
row_count= ws1.max_row
actual_row= 2
while actual_row <= row_count:                                        #writting the formula in every row
    r= str(actual_row)
    ws1["AC"+r] = "=(O"+r + "*P"+r +"*Q"+r +")/28316.8"
    actual_row= actual_row + 1

#Creating a new sheet with the pivot tables  
df = pd.read_excel(path, 0, header= 0)                                      #defining pivot table dataframe
wb.create_sheet("Sheet2")
 
pv_pack = pd.pivot_table(df, values=["actual_service_time"],\
index=["delivery_station_code"], columns=["cluster_prefix"], aggfunc=np.sum)  #constructing the pivot table

print(pv_pack)

with pd.ExcelWriter(path, mode="a") as writer:
    pv_pack.to_excel(writer, sheet_name="Sheet2") 
    writer.save()                                                      #inserting pivot table in sheet2

wb.save(path)

出于数据保护的原因,我无法向您显示数据透视表中的信息,但是当我打印它时,我可以准确地看到我想要的信息。问题是,尽管正确创建了 Sheet2,但我可以看到打印的信息没有出现在 Sheet2 中。为什么会这样?

我检查了这些问题:

  1. 无法将数据透视表写入 excel 文件
  2. 如何使用 Pandas 在现有的 excel 文件中保存新工作表?

关于第一个,显然 openpyxl 无法创建数据透视表,但我实际上不需要数据透视表格式,我只需要 Sheet2 中的 pv_pack 信息,如我打印时显示的那样。

我试图更改我的代码以模仿他们在第二个问题中所做的事情,但没有奏效。

先感谢您

编辑对 RJ Adriaansen 的回答:Sheet1 中的信息如下所示:

id  order   mtd delivery_station_code   cluster_prefix   actual_service_time
xh  aabb1   one     1                    One_            231    
xr  aabb2   two     2                    Two_            135    
xd  aabb3   three   3                    One_            80 
xh  aabb8   two     1                    Two_            205    
xp  aabb9   three   2                    One_            1  
xl  aabb10  one     3                    Two_            115    

我的编辑器中打印的代码如下所示:

delivery_station_code One_  Two_
1                     231   205
2                     1     135
3                     80    115
4

1 回答 1

0

with自动关闭文件,因此无需尝试手动保存。也不需要在写第二张纸之前创建它。删除writer.save()wb.save(path)向上移动将使代码正常工作。

#Writing the formula column
wb = openpyxl.load_workbook(filename=path)
ws1 = wb["Sheet1"]  
ws1["AC1"] = "CF Weight"                                                      
row_count= ws1.max_row
actual_row= 2

while actual_row <= row_count:                                        #writting the formula in every row
    r= str(actual_row)
    ws1["AC"+r] = "=(O"+r + "*P"+r +"*Q"+r +")/28316.8"
    actual_row= actual_row + 1
wb.save(path)

#Creating a new sheet with the pivot tables  
df = pd.read_excel(path, 0, header= 0)                                      #defining pivot table dataframe
 
pv_pack = pd.pivot_table(df, values=["actual_service_time"],\
index=["delivery_station_code"], columns=["cluster_prefix"], aggfunc=np.sum)  #constructing the pivot table

with pd.ExcelWriter(path, mode="a") as writer:
    pv_pack.to_excel(writer, sheet_name="Sheet2") 
于 2021-03-04T13:50:16.083 回答