Diverse Charaktere löschen im Dataframe

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.
peterwoodbridge
User
Beiträge: 50
Registriert: Freitag 30. November 2012, 10:26

nun ist mir noch was aufgefallen: bisher wollte ich die Zelle immer verändern; nun möchte ich in einem nächsten Schritt, die ganze Reihe löschen, wenn der String in der Spalte 2 in einer zuvor definierten Liste zu finden ist... ich nehm mal an, dass auch hier iterrows der falsche Weg ist :K
BlackJack

@peterwoodbridge: Grundlage von `pandas` sind wie gesagt `numpy`-Arrays. Die kann man mit einem Boolean-Array indexieren:

Code: Alles auswählen

In [39]: df
Out[39]: 
    C1 C2
0    4  b
1    5  a
2    1  b
3    3  a
4    2  c
5    1  b
6    2  b
7    1  b
8    1  c
9    2  d
10   3  a
11   4  b
12   6  a
13   6  d
14   1  d
15   5  b
16   3  b
17   1  a
18   1  b
19   2  a

In [40]: df[df.C2.isin(['a', 'b'])]
Out[40]: 
    C1 C2
0    4  b
1    5  a
2    1  b
3    3  a
5    1  b
6    2  b
7    1  b
10   3  a
11   4  b
12   6  a
15   5  b
16   3  b
17   1  a
18   1  b
19   2  a

In [41]: df[~df.C2.isin(['a', 'b'])]
Out[41]: 
    C1 C2
4    2  c
8    1  c
9    2  d
13   6  d
14   1  d
peterwoodbridge
User
Beiträge: 50
Registriert: Freitag 30. November 2012, 10:26

super! danke!!!
peterwoodbridge
User
Beiträge: 50
Registriert: Freitag 30. November 2012, 10:26

wie kann ich ein neues Dataframe erstellen, welches mir alle Zeilen des oben genannten Dataframes raus gibt, wo die Endung in der zweiten Spalte auf ".PC" lautet?

die Funktion endswith() geht weder für lists noch für Series.

Mit iterrows will ichs NICHT versuchen zu lösen :(
peterwoodbridge
User
Beiträge: 50
Registriert: Freitag 30. November 2012, 10:26

mit Zufall hab ichs herausgefunden, aber ist das eine sinnvolle Lösung?

Code: Alles auswählen

 df=df[df["C2"].map(lambda x: x.endswith(".PC"))]
ps: ich versteh das mapping eigentlich nicht.
BlackJack

@peterwoodbridge: Die `map()`-Methode mit einer Funktion als Argument aufgerufen wendet diese Funktion auf jedes Element an und liefert ein `Series`-Objekt mit den Ergebnissen dieser Aufrufe. Die Funktion die Du dort übergibst hat einen Wahrheitswert als Ergebnis, also bekommt man ein `Series`-Objekt mit Wahrheitswerten. Und das kann man als Index verwenden.

Code: Alles auswählen

In [29]: df
Out[29]: 
   C1  C2
0   8  ba
1   8  ba
2   2  cb
3   3  bb
4   1  bc
5   9  ba
6   4  cb
7   7  bc
8   4  cc
9   6  aa

In [30]: df.C2.map(lambda x: x.endswith('a'))
Out[30]: 
0     True
1     True
2    False
3    False
4    False
5     True
6    False
7    False
8    False
9     True
Name: C2

In [31]: df[df.C2.map(lambda x: x.endswith('a'))]
Out[31]: 
   C1  C2
0   8  ba
1   8  ba
5   9  ba
9   6  aa
Antworten