Seite 1 von 1

Pandas - Wo liegt der Fehler?

Verfasst: Freitag 12. April 2019, 20:32
von HerrBert
Hallo an Alle! :-)

Ich habe mir ein kleines Skript geschrieben, welches mir die Formatierung von .xls Dateien erleichtern soll.
Python 3.6 (Anaconda) mit Numpy & Pandas, Skript über Sublime Text 3.
-----------------------------------------------------------------------------------------------------------
1) df = pd.read_excel("Pfad/input.xls") => funktioniert

2) df = df.drop([0,1], axis=1) => [wirft Fehlermeldung aus: KeyError: '[0 1] not found in axis']

3) writer = pd.ExcelWriter("test.xlsx", engine = "xlsxwriter") => funktioniert

4) df.to_excel(writer, sheet_name="sheet1") => funktioniert

5) writer.save() => funktioniert
-----------------------------------------------------------------------------------------------------------

zu 2) Komischerweise funktioniert dies nicht, obwohl df = df.drop([0,1], axis=1) als Beispiel im doc angegeben ist... (https://pandas.pydata.org/pandas-docs/s ... .drop.html)

Ziel ist es, aus input.xls die Spalten mit Index 0 bis inklusive 4 zu entfernen und dann jede zweite Spalte zu entfernen:

input: 0,1,2,3,4,5,6,7,8,9[etc.] => output: 5,7,9,11,13,15 [etc.]

Evtl. kann dieses Code-Stückchen dabei helfen: df = df.iloc[[0,-1], [lambda x: x.index % 2 == 1]]

Kann mir Jemand helfen, die Spalten zu entfernen?

Vielen Dank und schöne Grüße! :)
HerrBert

Re: Pandas - Wo liegt der Fehler?

Verfasst: Samstag 13. April 2019, 12:06
von Sirius3
Die Spalten haben Namen (die erste Zeile der Excel-Datei). Und statt Spalten wegzuwerfen, ist es lesbarer, die Spalten auszuwählen, die Du behalten willst:

Code: Alles auswählen

df = df [['Spalte5', 'Und 7', 'dann die 9']]
Über df.columns kann man sich die auch geben lassen und passend Slicen.

Re: Pandas - Wo liegt der Fehler?

Verfasst: Samstag 13. April 2019, 22:12
von ThomasL
Der von dir versuchte Code steht nicht in dem Beispiel.
Da steht das hier:

Code: Alles auswählen

>>> df = pd.DataFrame(np.arange(12).reshape(3,4),
...                   columns=['A', 'B', 'C', 'D'])
>>> df
   A  B   C   D
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11

>>> df.drop([0, 1])
   A  B   C   D
2  8  9  10  11
Mit [0, 1] sind in dem Beispiel die erste und zweite REIHE gemeint, mit der Angabe axis=1 willst du aber SPALTEN entfernen.
Und Spalten mit dem Namen "0" und "1" gibt es weder im Beispiel noch in deiner xls-Datei.