Löschen von Zeilen aus einem Dataframe funktioniert nicht?!

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
KrachBumm
User
Beiträge: 18
Registriert: Mittwoch 27. Juli 2016, 07:50

Hallo,

ich habe folgendes Problem:

Ich habe über pandas eine Dataframe über eine excel-Datei erstellen lassen und habe diese bearbeitet. Dabei habe ich die "Tabelle" um einige Spalten eingekürzt. Jetzt möchte ich anhand eines Werter (hier 'P') Zeilen aus einer Spalte löschen. Den Befehl dafür habe ich auch gefunden. Das Problem ist nur er löscht nichts. Weder den Wert, den ich gelöscht haben möchte, noch andere.

Hier meine Liste:

Code: Alles auswählen

       FAK_ART    FAK_DAT  LEIST_DAT      KD_CRM MW_BW       EQ_NR MATERIAL  \
0         ZPAF 2015-05-18 2015-05-31         TMD     E  1003507107  G230ETS   
1         ZPAF 2015-05-18 2015-05-31         TMD     B  1003507107  G230ETS   
2         ZPAF 2015-05-18 2015-05-31         TMD     E  1003507108  G230ETS   
3         ZPAF 2015-05-18 2015-05-31         TMD     B  1003507108  G230ETS   
4         ZPAF 2015-05-18 2015-05-31         TMD     E  1003507109  G230ETS   
5         ZPAF 2015-05-18 2015-05-31         TMD     P  1003507109  G230ETS   
6         ZPAF 2015-05-18 2015-05-31         TMD     E  1003507110  G230ETS   
7         ZPAF 2015-05-18 2015-05-31         TMD     B  1003507110  G230ETS   
8         ZPAF 2015-05-18 2015-05-31         TMD     E  1003507111  G230ETS   
9         ZPAF 2015-05-18 2015-05-31         TMD     B  1003507111  G230ETS   
10        ZPAF 2015-05-18 2015-05-31         TMD     P  1003507112  G230ETS   
11        ZPAF 2015-05-18 2015-05-31         TMD     B  1003507112  G230ETS   
12        ZPAF 2015-05-18 2015-05-31         TMD     E  1003507113  G230ETS   
13        ZPAF 2015-05-18 2015-05-31         TMD     B  1003507113  G230ETS   
14        ZPAF 2015-05-18 2015-05-31         TMD     P  1003507114  G230ETS   
15        ZPAF 2015-05-18 2015-05-31         TMD     B  1003507114  G230ETS
Hier mein Quelltext um die Zeile im Dataframe zu löschen:

Code: Alles auswählen

data_faktura = pd.read_excel('fakt_daten.xlsx')
data_faktura[data_faktura.MW_BW != 'P']
#data_faktura.query('MW_BW != P')
#data_faktura[data_faktura.MW_BW.str.strip() != 'P']
data_faktura.to_excel('fakt_daten_bereinigt.xlsx', index=False)
#print(data_faktura)
Wie ihr sehen könnt habe ich auch nach Leerzeichen gesucht aber es passiert einfach nichts.

Habt ihr Ideen, woran das liegen könnte bzw. wie ich das Problem lösen kann?

lg

Damian
KrachBumm
User
Beiträge: 18
Registriert: Mittwoch 27. Juli 2016, 07:50

Problem gelöst! Danke!
BlackJack

@KrachBumm: Wäre für andere praktisch zu wissen wie das Problem gelöst wurde.

Die Indexzugriffe die Du da stehen hast löschen nichts, sondern sie wählen aus. Das Ergebnis ist ein DataFrame mit den Zeilen, die die Bedingung erfüllen, die Du da formuliert hast. Mit diesem Ergebnis musst Du weiter arbeiten.
KrachBumm
User
Beiträge: 18
Registriert: Mittwoch 27. Juli 2016, 07:50

achso stimmt! Sorry!

Die Lösung war eigentlich simpel.

Ich hatte einfach vergessen den Befehl auf mein Dataframe zurückzuführen!

Das war der ursprüngliche Befehl von mir:

Code: Alles auswählen

data_faktura[data_faktura.MW_BW != 'P']
Hier wurden die Werte einfach nur ausgewählt, wie du gesagt hast. Aber das eigentliche DataFrame wurde nicht bearbeitet.

Durch diesen Befehl wurden diese Zeilen dann auch aus dem Dataframe entfernt:

Code: Alles auswählen

data_faktura = data_faktura[data_faktura.MW_BW != 'P'
]

Hoffe die Erklärung ist verständlich ;)

Falls nicht bitte posten was unklar ist!

lg

Damian
sebastian0202
User
Beiträge: 168
Registriert: Montag 9. Mai 2016, 09:14
Wohnort: Berlin

Die Zeilen wurden nicht entfernt, sondern alle Zeilen selektiert die der Bedingung entsprechen.
Und diese Selektion hast du nun neu gespeichert.
Also war es eigentlich andersherum :P
Antworten