2016-05-22 14 views
2

Python:Sauberste Möglichkeit, einen Pandas Datenrahmen zu filtern?

pd.read_csv("CME-datasets-codes.csv", header=None) 

Produziert:

0    1 
0 CME/OH2014  Oats Futures, March 2014, OH2014, CBOT 
1 CME/HGG2004  Copper Futures, February 2004, HGG2004, COMEX 
2 CME/BRH2014  Brazilian Real (BRL/USD) Futures, March 2014, ... 
3 CME/F5H2014  PJM PPL Zone Off-Peak Calendar-Month Day-Ahead... 
4 CME/PDMU2016 MISO Indiana Hub Day-Ahead Peak Calendar-Month... 

Ich möchte dies filtern mir alle Zeilen zu zeigen, die mit "CME/C" in Spalte 0

starten Was die sauberste Weg, ?

Antwort

8
df[df[0].str.startswith('CME/C')] 
+0

Es kann notwendig sein, den Spaltennamen 'df [df ['0']. Str.startswith ('CME/C')] ' – Romain

+1

wird es nicht sein , da das OP einen csv mit der Option 'header = None' einliest, was bedeutet, dass Pandas die Spalten mit Ganzzahlen nummerieren. 'df ['0']' wird einen Fehler ausgeben. –

+1

Alternative ist die Verwendung 'loc' -' df [df.loc [:, 0] .str.startswith ('CME/C')] ' – jezrael

2

können Sie tun:

df[df.0.str[:5]=="CME/C"] 
2

Die einfache und hässliche Strecke ist

df[df['column_name'] == value]

Auf den ersten Blick ist dies nur Gleichheiten fangen, aber in Wirklichkeit jede vektorisiert Funktion technisch kann darüber angewendet werden. Als solche können Sie verwenden:

df[df['column_name'].str.startswith('CME\/C')]

Es gibt andere Methoden, wie Maskierung, die ein wenig mehr elegant aussehen. Sie sind jedoch weder effektiver noch unbedingt wert. Manchmal ist hässlich der Weg zu gehen;)

Verwandte Themen