Diverse Charaktere löschen im Dataframe
-
- 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
@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
-
- User
- Beiträge: 50
- Registriert: Freitag 30. November 2012, 10:26
super! danke!!!
-
- 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
die Funktion endswith() geht weder für lists noch für Series.
Mit iterrows will ichs NICHT versuchen zu lösen
-
- User
- Beiträge: 50
- Registriert: Freitag 30. November 2012, 10:26
mit Zufall hab ichs herausgefunden, aber ist das eine sinnvolle Lösung?
ps: ich versteh das mapping eigentlich nicht.
Code: Alles auswählen
df=df[df["C2"].map(lambda x: x.endswith(".PC"))]
@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