Pandas - Wo liegt der Fehler?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
HerrBert
User
Beiträge: 1
Registriert: Sonntag 7. April 2019, 08:01

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
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten