Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pandas Dataframe to Excel Sheet

Tags:

python

pandas

I have an Excel file (.xls format) with 5 sheets, I want to replace the contents of sheet 5 with contents of my pandas data frame.

like image 238
gaurav gurnani Avatar asked Apr 05 '15 16:04

gaurav gurnani


People also ask

Can pandas write to Excel?

Write Excel with Python Pandas. You can write any data (lists, strings, numbers etc) to Excel, by first converting it into a Pandas DataFrame and then writing the DataFrame to Excel.

How Excel read data from pandas?

To read an excel file as a DataFrame, use the pandas read_excel() method. You can read the first sheet, specific sheets, multiple sheets or all sheets. Pandas converts this to the DataFrame structure, which is a tabular like structure.


2 Answers

From your above needs, you will need to use both Python (to export pandas data frame) and VBA (to delete existing worksheet content and copy/paste external data).

With Python: use the to_csv or to_excel methods. I recommend the to_csv method which performs better with larger datasets.

# DF TO EXCEL from pandas import ExcelWriter  writer = ExcelWriter('PythonExport.xlsx') yourdf.to_excel(writer,'Sheet5') writer.save()  # DF TO CSV yourdf.to_csv('PythonExport.csv', sep=',') 

With VBA: copy and paste source to destination ranges.

Fortunately, in VBA you can call Python scripts using Shell (assuming your OS is Windows).

Sub DataFrameImport()   'RUN PYTHON TO EXPORT DATA FRAME   Shell "C:\pathTo\python.exe fullpathOfPythonScript.py", vbNormalFocus    'CLEAR EXISTING CONTENT   ThisWorkbook.Worksheets(5).Cells.Clear    'COPY AND PASTE TO WORKBOOK   Workbooks("PythonExport").Worksheets(1).Cells.Copy   ThisWorkbook.Worksheets(5).Range("A1").Select   ThisWorkbook.Worksheets(5).Paste End Sub 

Alternatively, you can do vice versa: run a macro (ClearExistingContent) with Python. Be sure your Excel file is a macro-enabled (.xlsm) one with a saved macro to delete Sheet 5 content only. Note: macros cannot be saved with csv files.

import os import win32com.client from pandas import ExcelWriter  if os.path.exists("C:\Full Location\To\excelsheet.xlsm"):   xlApp=win32com.client.Dispatch("Excel.Application")   wb = xlApp.Workbooks.Open(Filename="C:\Full Location\To\excelsheet.xlsm")    # MACRO TO CLEAR SHEET 5 CONTENT   xlApp.Run("ClearExistingContent")   wb.Save()    xlApp.Quit()   del xl    # WRITE IN DATA FRAME TO SHEET 5   writer = ExcelWriter('C:\Full Location\To\excelsheet.xlsm')   yourdf.to_excel(writer,'Sheet5')   writer.save()  
like image 151
Parfait Avatar answered Sep 20 '22 09:09

Parfait


Or you can do like this:

your_df.to_excel( r'C:\Users\full_path\excel_name.xlsx',                   sheet_name= 'your_sheet_name'                 ) 
like image 22
Christian Avatar answered Sep 21 '22 09:09

Christian