2013-07-30 11 views
21

Dies funktioniert (mit Pandas 12 dev)Pandas von Datenrahmen wählen starts mit

table2=table[table['SUBDIVISION'] =='INVERNESS'] 

Dann wurde mir klar, ich brauchte das Feld wählen mit „beginnt mit“ Da ich ein paar fehlte. Also je die Pandas doc so nahe, wie ich versuchte ich

criteria = table['SUBDIVISION'].map(lambda x: x.startswith('INVERNESS')) 
table2 = table[criteria] 

folgen konnte und Attribut bekam: ‚schweben‘ Objekt kein Attribut ‚starts‘ hat

Also habe ich versucht, eine alternative Syntax mit dem gleichen Ergebnis

table[[x.startswith('INVERNESS') for x in table['SUBDIVISION']]] 

Referenz http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing Abschnitt 4: Liste Comprehensions und Kartenmethode Series können auch komplexere Kriterien verwendet werden, um:

Was fehlt mir?

+0

Könnten Sie geben Sie ein kleines Beispiel, das dies demonstriert, ich bin überrascht, dass das Listenverständnis nicht auf die gleiche Weise wie die Karte ansteigen würde ... –

Antwort

33

Sie können die str.startswith Datenrahmen Methode konsistentere Ergebnisse erhalten:

In [11]: s = pd.Series(['a', 'ab', 'c', 11, np.nan]) 

In [12]: s 
Out[12]: 
0  a 
1  ab 
2  c 
3  11 
4 NaN 
dtype: object 

In [13]: s.str.startswith('a', na=False) 
Out[13]: 
0  True 
1  True 
2 False 
3 False 
4 False 
dtype: bool 

und die boolean Indizierung wird gut funktionieren (ich ziehe loc zu verwenden, aber es funktioniert genauso ohne):

In [14]: s.loc[s.str.startswith('a', na=False)] 
Out[14]: 
0  a 
1 ab 
dtype: object 

.

Es sieht mindestens eines Ihrer Elemente in der Reihe/Spalte ist ein Schwimmer, der keinen starts Methode, um die Attribute daher hat, sollte die Liste Verständnis die gleichen Fehler erhöhen ...

+0

Vielen Dank für Ihre Antwort ... Scheint nicht zu sein. 'UNTERTEILUNG'] str.startswith ('INVERNESS', na = Falsch) und Tabelle ['SUBDIVISION'] str.startswith ('INVERNESS', na = Falsch) ^ SyntaxError: ungültige Syntax Ich frage mich, ob ich etwas nicht importiert habe wesentlich? Ich verstehe es nicht, da meine straight == Bedingung gut funktioniert – dartdog

+1

Und wenn ich table.loc [table ['SUBDIVISION'] versuche. Str.startswith ('INVERNESS', na = False)] bekomme ich ein gutes Ergebnis !! Aber ich verstehe immer noch nicht, was mit den vorherigen Versuchen falsch ist. – dartdog

+0

@dartdog Sie haben einen Punkt vermisst. Bitte fügen Sie eine kleine Teilmenge der Daten bei, die das Problem zeigen (es scheint schwer zu glauben: s) –