จะเขียน dataframe ของค่าสตริงไปยังไฟล์ excel เป็นค่าตัวเลขที่จัดรูปแบบได้อย่างไร

Jan 05 2021

โดยทั่วไปฉันมีรายการค่าสตริงที่ตั้งใจจะแปลงเป็นตัวเลขและพิมพ์ลงในแผ่นงาน excel Im สามารถที่จะทำอยู่แล้ว แต่ฉันต้องการค่าเหล่านั้นที่จะพิมพ์เป็น "ค่าจำนวน Excel" นี่คือสิ่งที่ฉันได้รับ:

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()

ผลลัพธ์ของฉันคือ:

ผลลัพธ์ Excel

แต่ฉันต้องการให้พิมพ์เป็นค่าตัวเลขแยกจากจุดต่างๆเพื่อให้พร้อมง่ายขึ้นเช่น:

สิ่งที่ฉันต้องการเป็นผล

(โซลูชันที่ฉันต้องการไม่สามารถพิมพ์เป็นสตริงใน excel ที่เป็นผลลัพธ์ได้ต้องเป็นค่าตัวเลขเหมือนกับว่าเราใช้ตัวเลือก "Format as Number (Shift + ctrl + 1)" ใน libreoffice calc)

(ฉันใช้ Python 3.8.5 และ LibreOffice Calc ในการทดสอบ แต่ผลลัพธ์มีไว้เพื่อใช้งานใน Excel 2016)

เป็นไปได้หรือไม่? ขอบคุณสำหรับความช่วยเหลือและขออภัยเกี่ยวกับภาษาอังกฤษของฉัน!

คำตอบ

DonLarry Jan 06 2021 at 07:11

ฉันได้พบคำถามอื่นนี้มันแตกต่างกัน แต่คำตอบก็เหมือนกันที่ฉันคิด

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()

มันใช้งานได้กับรูปแบบนั้น แต่ดูเหมือนว่าจะใช้ไม่ได้กับ'#.##0,00'รูปแบบ

DonLarry Jan 05 2021 at 21:55

ตรวจสอบสิ่งนี้ https://xlsxwriter.readthedocs.io/working_with_pandas.html

เป็นไปได้ที่จะจัดรูปแบบข้อมูลคอลัมน์อื่น ๆ ที่ไม่ใช่วันที่ / วันที่และเวลาโดยใช้ set_column ()

ลองเปลี่ยนโค้ดตัวอย่างการจัดรูปแบบจากสิ่งนี้:

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

สำหรับสิ่งนี้:

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