2016-07-11 14 views
1

ich mit einem Bild beginnen würde für sich offenbar das Problem mit dem Export multindexes mit Pandas nativen Export und xlwingsxlwings vs pandas nativen Export mit Multi-Index-Datenrahmen: Wie versöhnen?

enter image description here

im Wesentlichen, ich mag das ‚Pandas nativen‘ Ergebnis [den Multiindex richtig exportierte erklärt zu übertreffen] getan mit Xlwings, weil ich eine Reihe anderer Eigenschaften habe, die XlWings tun können und andere können nicht (nein, nicht einmal wenn ExcelWriter und dergleichen verwenden, weil ich das Blatt löschen muss und ich ein nicht python Ding in das gleiche Blatt eingefügt habe welches auch bei Initialisierung gelöscht würde)

der verwendete Code:

import pandas as pd 
import numpy as np 
import xlwings as xw 
import os 

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], 
      ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] 

tuples = list(zip(*arrays)) 
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second']) 
s = pd.DataFrame(np.random.randn(8, 8), index=index).transpose() 
print(s) 

# EXPORT 

filename = 'format_excel_export.xlsx' 
s.to_excel(filename) 

outpath = os.path.join(os.path.abspath(os.path.dirname(__file__)), filename) 
os.path.sep = r'/' 
wb = xw.Workbook(outpath) 

xw.Range('Sheet1', 'A13').value = s 

Antwort

2

Sie könnten einen benutzerdefinierten Konverter implementieren, dass es die Art und Weise formatiert, die Pandas, here sieht.

Ab Version 0.2.2 unterstützt xlwings jedoch noch nicht nativ die Erstellung von Schriften, die Verschmelzung von Zellen und Zellenrändern. Sie können umgehen, indem Sie auf pywin32 (unter Windows) zurückgreifen, siehe here.

Im Wesentlichen muss Ihr benutzerdefinierter Konverter die write_value-Methode überschreiben, siehe here.

Es macht Sinn, dies in die Bibliothek zu einem bestimmten Zeitpunkt zu bauen, so habe ich ein Problem geöffnet, siehe here.