2015-04-30 14 views
5

Próbuję napisać pandę DataFrame do pliku .xlsx, gdzie różne kolumny numeryczne miałyby różne formaty. Na przykład niektóre pokazywałyby tylko dwa miejsca po przecinku, niektóre nie pokazywałyby żadnych, niektóre byłyby sformatowane jako procenty z symbolem "%" itd.Pisanie pand DataFrame do Excela z różnymi formatami dla różnych kolumn

Zauważyłem, że DataFrame.to_html() ma parametr formatters, który pozwala na to właśnie , mapowanie różnych formatów do różnych kolumn. Jednak nie ma podobnego parametru w metodzie DataFrame.to_excel(). Najbardziej mamy float_format, która jest globalna dla wszystkich liczb.

Znam wielu tak posty, które są przynajmniej częściowo związane z moim pytaniem, na przykład:

Czy istnieją inne, bardziej wygodne funkcje Excel powiązane/właściwości w API pand, które mogą pomóc tutaj, lub coś podobnego na openpyxl, czy może jakiś sposób, aby określić format wyjściowy metadane bezpośrednio na każdą kolumnę w DataFrame, która byłaby później interpretowana przez różne produkty?

+0

co z usunięciem WSZYSTKICH formatów? Czy ktoś wie, czy jest na to szybki sposób? – Lisle

Odpowiedz

9

Można to zrobić z Pand 0,16 i silnikiem XlsxWriter o dostępie do podstawowych skoroszytu i arkusza obiekty:

import pandas as pd 

# Create a Pandas dataframe from some data. 
df = pd.DataFrame(zip(
    [1010, 2020, 3030, 2020, 1515, 3030, 4545], 
    [.1, .2, .33, .25, .5, .75, .45], 
    [.1, .2, .33, .25, .5, .75, .45], 
)) 

# Create a Pandas Excel writer using XlsxWriter as the engine. 
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter') 
df.to_excel(writer, sheet_name='Sheet1') 

# Get the xlsxwriter objects from the dataframe writer object. 
workbook = writer.book 
worksheet = writer.sheets['Sheet1'] 

# Add some cell formats. 
format1 = workbook.add_format({'num_format': '#,##0.00'}) 
format2 = workbook.add_format({'num_format': '0%'}) 
format3 = workbook.add_format({'num_format': 'h:mm:ss AM/PM'}) 

# Set the column width and format. 
worksheet.set_column('B:B', 18, format1) 

# Set the format but not the column width. 
worksheet.set_column('C:C', None, format2) 

worksheet.set_column('D:D', 16, format3) 

# Close the Pandas Excel writer and output the Excel file. 
writer.save() 

wyjściowa:

enter image description here

Zobacz także Working with Python Pandas and XlsxWriter.

Powiązane problemy