¿Cómo escribir un marco de datos de valores de cadena en un archivo de Excel como valores numéricos formateados?
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
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
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'})