2017-11-25 1 views
2

Der Versuch, dieses Styler-Objekt zu konvertieren Blatt xlsx:MetaSerialisable Objekt Argument nach ** muss eine Abbildung, Unicode nicht

avg.style.background_gradient(cmap='RdYlGn',low=.09,high=.18,axis=1).to_excel('test.xlsx',engine='xlsxwriter') 

enter image description here

Allerdings erhalte ich die Fehlermeldung:

TypeError: MetaSerialisable object argument after ** must be a mapping, not unicode 

und wenn ich versuche:

avg.style.background_gradient({'cmap':'RdYlGn'},low=.09,high=.18,axis=1).to_excel('test.xlsx',engine='xlsxwriter') 

TypeError: ("unhashable type: 'dict'", u'occurred at index (Gain/Expsr%, 5)') 

Mit dieser hier, es gibt nur keine Ausgabe Hintergrundgradienten:

writer = pd.ExcelWriter('usher.xlsx') 
df.style.background_gradient(cmap='RdYlGn').to_excel(writer,engine='openpyxl') 
writer.save() 
+0

Haben Sie die gleiche Fehlermeldung erhalten, wenn Sie die 'to_excel()' Teil weglassen? – jmcnamara

+0

@jmcnamara Nein, das Styler-Objekt funktioniert einwandfrei –

+0

Ok. Aus den Pandas [Styler] (http://pandas.pydata.org/pandas-docs/stable/style.html) -Dokumenten sieht es so aus, dass 'background_gradient' möglicherweise nur in der HTML-Ausgabe unterstützt wird. Und selbst dann wird der von 'to_excel()' unterstützte Stil nur unterstützt, wenn 'openpyxl' als Excel-Engine verwendet wird. – jmcnamara

Antwort

2

die Pandas Styler nur in to_excel() unterstützt wird, wenn sie als Excel-Engine openpyxl. Auch von der Pandas docs sieht es aus wie background_gradient wird möglicherweise nur in der HTML-Ausgabe unterstützt.

Alternativ verwenden Sie stattdessen die bedingte Formatierung in Excel über XlsxWriter and Pandas.

import pandas as pd 


# Create a Pandas dataframe from some data. 
df = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]}) 

# Create a Pandas Excel writer using XlsxWriter as the engine. 
writer = pd.ExcelWriter('pandas_conditional.xlsx', engine='xlsxwriter') 

# Convert the dataframe to an XlsxWriter Excel object. 
df.to_excel(writer, sheet_name='Sheet1') 

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

# Apply a conditional format to the cell range. 
worksheet.conditional_format('B2:B8', {'type': '3_color_scale'}) 

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

enter image description here

Verwandte Themen