Escribiendo un documento DataFrame a Word de Python Pandas

Estoy trabajando en la creación de un informe generado por Python que usa Pandas DataFrames. Actualmente estoy usando el método DataFrame.to_string() . Sin embargo, esto se escribe en el archivo como una cadena. ¿Hay alguna manera de lograrlo mientras lo mantengo como una tabla para que pueda usar el formateo de tablas?

Código:

 SEMorgkeys = client.domain_organic(url, database = "us", display_limit = 10, export_columns=["Ph,Pp,Pd,Nq,Cp,Ur,Tr"]) org_df = pd.DataFrame(SEMorgkeys) f = open(name, 'w') f.write("\nOrganic:\n") f.write(org_df.to_string(index=False,justify="left")) f.close() 

Impresión actual (como cadena):

 CPC Keyword Position Difference Previous Position Search Volume Traffic (%) Url 75.92 small business factoring 0 1 210 11.69 https://www..com/small-business-f... 80.19 factoring company 0 8 1600 5.72 https://www..com/factoring-vs-ban... 

Puede escribir la tabla directamente en un archivo .docx utilizando la biblioteca python-docx .

Si está utilizando Conda o Python instalado con Anaconda, puede ejecutar el comando desde la línea de comandos:

 conda install python-docx --channel conda-forge 

O para instalar desde la línea de comandos:

 pip install python-docx 

Después de que se instale, podemos usarlo para abrir el archivo, agregar una tabla y luego rellenar el texto de la celda de la tabla con los datos del dataframe.

 import docx import pandas as pd # i am not sure how you are getting your data, but you said it is a # pandas data frame df = pd.DataFrame(data) # open an existing document doc = docx.Document('./test.docx') # add a table to the end and create a reference variable # extra row is so we can add the header row t = doc.add_table(df.shape[0]+1, df.shape[1]) # add the header rows. for j in range(df.shape[-1]): t.cell(0,j).text = df.columns[j] # add the rest of the data frame for i in range(df.shape[0]): for j in range(df.shape[-1]): t.cell(i+1,j).text = str(df.values[i,j]) # save the doc doc.save('./test.docx') 
 def doctable(data, tabletitle, pathfile): from docx import Document import pandas as pd document = Document() data = pd.DataFrame(data) # My input data is in the 2D list form document.add_heading(tabletitle) table = document.add_table(rows=(data.shape[0]), cols=data.shape[1]) # First row are table headers! for i, column in enumerate(data) : for row in range(data.shape[0]) : table.cell(row, i).text = str(data[column][row]) document.save(pathfile)