【发布时间】:2022-08-20 19:45:44
【问题描述】:
我从一两天开始就被卡住了,然后放弃了。我是使用 python 和 excel 的新手。
这是我的场景; 我打算将 pandas 数据框写入现有的 excel 工作表。工作表中有 50 列。其中 2 个列是派生的(公式列通过计算从其他列发展而来),并且分别位于这 50 个列中的第 48 和 50 位之间。 因此,我的数据框应该写入这个 excel 表,跳过位置第 48 列和第 50 列。我正在使用 win32com 和 pandas 来完成我的工作。
问题陈述:
但是当我写入数据框时;
-
只有数据框中的第一条记录被写入整个 excel 工作表范围。为什么我不粘贴从数据框列中获得的整个熊猫系列?
-
如何处理此代码中为 excel 设置为空白的 \"None\" 和 \"NaN\"? (可选的)
代码:下面的代码是我如何将数据框写入 excel 的 sn-p(来自整个代码)。
-
\"Report_data\" 是熊猫数据框。这也是我正在写的 excel 中工作表的名称。
-
Excel_Template_File 有我的 excel 模板文件的文件路径,其中工作表 \"Report Data\" 是让我从 python 写入我的数据框
excel_app = client.dynamic.Dispatch(\"Excel.Application\") # Initialize instance excel_app.Interactive = False excel_app.Visible = False wb = excel_app.Workbooks.Open(Excel_Template_File) ws = wb.Worksheets(\'Report Data\') for col_idx in range(0,len(Report_Data.columns)): col_lst = Report_Data.columns.values.tolist() if col_lst[col_idx] in [col_lst[-1], col_lst[-3]]: continue; else: print(col_lst[col_idx]) col_vals = Report_Data.iloc[:,col_idx] # Copy values of column from dataframe as series print(\'mapping to cell locations...\') xl_col_idx = col_idx + 1 try: # Write column by column to avoid formula columns ws.Range(ws.Cells(2, xl_col_idx), ws.Cells(1+len(col_vals),xl_col_idx)).Value = col_vals.values except pywintypes.com_error: print(\"Error\") wb.SaveAs(\'C:\\\\somepath\\\\Excel_\'+time.strftime(\"%Y%m%d-%H%M%S\")+\'.xlsx\') # Save our work wb.Close(True) excel_app.quit()try 块是写东西以在给定范围内表现出色的块。
已完成验证:
-
我尝试了 df.to_excel() 但它清除了我的整个 excel 模板,这是我负担不起的,因为这个 excel 中有超过 30-40 个工作表,这些工作表由从这个“报告数据”表生成的数据透视表和图表组成
-
除了 pywin32com,我无法利用任何其他 excel 库,因为有多个 excel 文件,我从中提取数据以使 pandas 数据框最终写入 excel 中的工作表“报告数据”。由于我从中提取的优秀作品位于网络驱动器 win32com 套件上。在我的情况下,openpyxl 命令 load_workbok() 也需要永远打开。
-
数据框具有正确的数据,因为我通过使用 .head() 打印它来检查它。因此,提取的 excel 已正确连接和合并。
-
文件大小约为 200 MB。
结论和预期产出:
因此,请协助将我的熊猫系列(或数组)转储到 excel 中的相应列位置。从df逐列写入excel
由于上面的代码既不会擦除位置 48 和 50 处的派生列公式,也不会像 to_excel 一样擦除 excel clean
-
-
标签: python excel pandas pywin32 win32com