Bestimmte Zellen einer xlsx Datei mit "0" umtauschen.

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
python..neuling
User
Beiträge: 10
Registriert: Freitag 10. September 2021, 10:09

Hallo Leute,
ich möchte aus einer xlsx Datei die Zellen mit "Unnamed: x" (x ist dabei eine Zahl) mit einer "0" umtauschen, aber habe ein paar Schwierigkeiten. Als Ansatz möchte ich die .rename Funktion verwenden, aber kam bis jetzt nicht zum gewünschten Ergebnis. Soll ich eurer Meinung nach den Ansatz ändern oder geht es nicht ohne weiteres. Ich würde mich über jede hilfreiche Antwort freuen. :)
Zuletzt geändert von python..neuling am Montag 13. September 2021, 18:25, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie sieht denn jetzt Dein Code zum Lesen der Exceltabellen aus und wie sollen die Dataframe aussehen?
Beim Einlesen solltest Du schon das richtige Format haben, überspringen von Zeilen geht bei read_excel per skiprow.
python..neuling
User
Beiträge: 10
Registriert: Freitag 10. September 2021, 10:09

Danke für die Antwort @Sirius3. Ich habe meine Frage geändert, weil die erste Frage geklärt wurde (hatte einen ziemlich dummen Schreibfehler drin haha).
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie sieht denn jetzt Dein Code zum Lesen der Exceltabellen aus und wie sollen die Dataframe aussehen?
python..neuling
User
Beiträge: 10
Registriert: Freitag 10. September 2021, 10:09

Ich habe es inzwischen hinbekommen. Mein Code ist aber etwas zu lang (Lösung nicht sehr elegant).
Die Kopfzeile sah vorher so aus: https://imagizer.imageshack.com/img924/8691/3yGWTT.png
Durch mein Code sind die Unnamed Zellen geleert worden. @Sirius3 Hier ist mein Code:


name3 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name4 = name3.replace('Unnamed: 1_level_1', '', regex=True)
name4.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name4 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name5 = name4.replace('Unnamed: 1_level_2', '', regex=True)
name5.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name5 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name6 = name5.replace('Unnamed: 2_level_1', '', regex=True)
name6.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name6 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name7 = name6.replace('Unnamed: 2_level_2', '', regex=True)
name7.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name7 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name8 = name7.replace('Unnamed: 4_level_3', '', regex=True)
name8.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name8 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name9 = name8.replace('Unnamed: 5_level_3', '', regex=True)
name9.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name9 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name10 = name9.replace('Unnamed: 6_level_3', '', regex=True)
name10.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name10 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name11 = name10.replace('Unnamed: 7_level_3', '', regex=True)
name11.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name11= pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name12 = name11.replace('Unnamed: 8_level_3', '', regex=True)
name12.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name12 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name13 = name12.replace('Unnamed: 9_level_3', '', regex=True)
name13.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name13 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name14 = name13.replace('Unnamed: 10_level_3', '', regex=True)
name14.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name14 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name15 = name14.replace('Unnamed: 11_level_3', '', regex=True)
name15.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name15 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name16 = name15.replace('Unnamed: 12_level_1', '', regex=True)
name16.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name16 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name17 = name16.replace('Unnamed: 12_level_2', '', regex=True)
name17.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name17 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name18 = name17.replace('Unnamed: 13_level_1', '', regex=True)
name18.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name18 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name19 = name18.replace('Unnamed: 13_level_2', '', regex=True)
name19.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name19 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name20 = name19.replace('Unnamed: 14_level_1', '', regex=True)
name20.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name20 = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name21 = name20.replace('Unnamed: 14_level_2', '', regex=True)
name21.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name22 = name21.rename(columns={'Unnamed: 0.1.1':''})
name22.to_excel('Gruppenauswertung_Kurs_1.xlsx')

name23 = name22.rename(columns={'Unnamed: 1':''})
name23.to_excel('Gruppenauswertung_Kurs_1.xlsx')

name24 = name23.rename(columns={'Unnamed: 4':''})
name24.to_excel('Gruppenauswertung_Kurs_1.xlsx')

name25 = name24.rename(columns={'Unnamed: 6':''})
name25.to_excel('Gruppenauswertung_Kurs_1.xlsx')

name26 = name25.rename(columns={'Unnamed: 8':''})
name26.to_excel('Gruppenauswertung_Kurs_1.xlsx')

name27 = name26.rename(columns={'Unnamed: 10':''})
name27.to_excel('Gruppenauswertung_Kurs_1.xlsx')

name28 = name27.rename(columns={'Unnamed: 11':''})
name28.to_excel('Gruppenauswertung_Kurs_1.xlsx')

name29 = name28.rename(columns={'Unnamed: 12':''})
name29.to_excel('Gruppenauswertung_Kurs_1.xlsx')

name30 = name27.rename(columns={'Unnamed: 13':''})
name30.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

Gibt es eine andere (kürzere) Möglichkeit die Unnamed Zellen zu leeren? Ansonsten würde ich es so stehen lassen. Wäre für jeden Tipp dankbar. :)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn man anfängt, Variablennamen durchzunummerieren macht man etwas falsch. Hier stellt sich die Frage, warum man überhaupt unterschiedliche Variablennamen braucht.

Code: Alles auswählen

name = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name = name.replace('Unnamed: 1_level_1', '', regex=True)
name.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name = name.replace('Unnamed: 1_level_2', '', regex=True)
name.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)

name = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name = name.replace('Unnamed: 2_level_1', '', regex=True)
name.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)
...
Jetzt schreibst Du immer die Excel-Tabelle, nur um sie sofort wieder einzulesen. Das kann man sich sparen. Später läßt Du dann das Lesen weg (warum auch immer) und schreibst nur noch.

Code: Alles auswählen

name = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name = name.replace('Unnamed: 1_level_1', '', regex=True)
name = name.replace('Unnamed: 1_level_2', '', regex=True)
name = name.replace('Unnamed: 2_level_1', '', regex=True)
name = name.replace('Unnamed: 2_level_2', '', regex=True)
name = name.replace('Unnamed: 4_level_3', '', regex=True)
name = name.replace('Unnamed: 5_level_3', '', regex=True)
name = name.replace('Unnamed: 6_level_3', '', regex=True)
name = name.replace('Unnamed: 7_level_3', '', regex=True)
name = name.replace('Unnamed: 8_level_3', '', regex=True)
name = name.replace('Unnamed: 9_level_3', '', regex=True)
name = name.replace('Unnamed: 10_level_3', '', regex=True)
name = name.replace('Unnamed: 11_level_3', '', regex=True)
name = name.replace('Unnamed: 12_level_1', '', regex=True)
name = name.replace('Unnamed: 12_level_2', '', regex=True)
name = name.replace('Unnamed: 13_level_1', '', regex=True)
name = name.replace('Unnamed: 13_level_2', '', regex=True)
name = name.replace('Unnamed: 14_level_1', '', regex=True)
name = name.replace('Unnamed: 14_level_2', '', regex=True)
name = name.rename(columns={'Unnamed: 0.1.1':''})
name = name.rename(columns={'Unnamed: 1':''})
name = name.rename(columns={'Unnamed: 4':''})
name = name.rename(columns={'Unnamed: 6':''})
name = name.rename(columns={'Unnamed: 8':''})
name = name.rename(columns={'Unnamed: 10':''})
name = name.rename(columns={'Unnamed: 11':''})
name = name.rename(columns={'Unnamed: 12':''})
name = name.rename(columns={'Unnamed: 13':''})
name.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)
Jetzt hast Du ein sehr regelmäßiges Muster, und nutzt aus irgendeinem Grund eh schon reguläre Ausdrücke. rename kann man mehrere Spalten gleichzeitig übergeben.

Code: Alles auswählen

name = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
name = name.replace(r'Unnamed: \d+_level_\d+', '', regex=True)
name = name.rename(columns={'Unnamed: 0.1.1':'', 'Unnamed: 1':'', 'Unnamed: 4':'',
    'Unnamed: 6':'', 'Unnamed: 8':'', 'Unnamed: 10':'', 'Unnamed: 11':'',
    'Unnamed: 12':'', 'Unnamed: 13':''})
name.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)
Die Spaltennamen folgen auch einem Muster, das man ausnutzen könnte. Das ganze noch inplace, da Du mit dem alten Dataframe nichts mehr anfängst.
Zum Schluß der Variable noch einen ordentlichen Namen geben (sollte eigentlich das erste sein):

Code: Alles auswählen

gruppenauswertung = pd.read_excel('Gruppenauswertung_Kurs_1.xlsx')
gruppenauswertung.replace(r'Unnamed: \d+_level_\d+', '', regex=True, inplace=True)
gruppenauswertung.columns = ['' if column.startswith('Unnamed:') else column for column in gruppenauswertung.columns]
gruppenauswertung.to_excel('Gruppenauswertung_Kurs_1.xlsx', index=False)
Nachdem die Exceltabelle nun aufgeräumt ist, stellt sich aber zu allererst die Frage, warum sieht die Exceltabelle überhaupt so aus? Woher kommen die Daten, wer schreibt sie in diesem Format? Warum ändert derjenige, der das zuerst schreibt nicht seinen Code?
Antworten