¿Cómo escribir un marco de datos de valores de cadena en un archivo de Excel como valores numéricos formateados?

Jan 05 2021

Básicamente, tengo una lista de valores de cadena que deben convertirse en numéricos e imprimirse en una hoja de Excel. Ya puedo hacerlo, pero quiero que esos valores se impriman como "valores numéricos de Excel" . Esto es lo que obtuve:

writer = pd.ExcelWriter('test.xlsx', engine='openpyxl')

listOfValues = ['3913375,45','126179,15','22324,72','26335,28','3699901,34']

df_values = pd.DataFrame({'TOTAL': listOfValues}).apply(pd.to_numeric)

df_values.to_excel(writer, sheet_name='test')

writer.save()

Mi resultado es:

Excel resultante

Pero quiero que se imprima como valores numéricos separados por puntos para que sea más fácil de preparar, así:

Lo que quiero tener como resultado

(La solución que quiero no se puede imprimir como cadenas en el Excel resultante, debe ser valores numéricos, como si estuviéramos usando la opción "Formatear como número (Shift + ctrl + 1)" en libreoffice calc).

(Estoy usando Python 3.8.5 y LibreOffice Calc para las pruebas, pero el resultado está destinado a funcionar en Excel 2016).

¿Es eso posible? ¡Gracias por tu ayuda y perdón por mi inglés!

Respuestas

DonLarry Jan 06 2021 at 07:11

Encontré esta otra pregunta , es diferente, pero creo que la respuesta es la misma.

from openpyxl import load_workbook

wb = load_workbook('a.xlsx')
ws = wb[wb.sheetnames[0]]
cell11 = ws.cell(1, 1)
cell11.number_format = '#,##0.00'
wb.save('b.xlsx')
wb.close()

Funciona con ese formato, pero parece que no funciona con el '#.##0,00'formato

DonLarry Jan 05 2021 at 21:55

Mira esto https://xlsxwriter.readthedocs.io/working_with_pandas.html

Es posible formatear cualquier otro dato de columna que no sea de fecha / fecha y hora usando set_column ()

Intente cambiar el código de ejemplo de formato de esto:

format1 = workbook.add_format({'num_format': '#,##0.00'})

a esto:

format1 = workbook.add_format({'num_format': '#.##0,00'})