2017-05-16 3 views
1

Ich habe folgende df, und ich möchte einen Filter über die Spaltennamen zu übernehmen und einfach diejenigen bleiben, die mit einer bestimmten Zeichenfolge beginnen:Filtering Spalten in Datenrahmen, die mit einer bestimmten Zeichenfolge beginnen

Dies ist meine aktuelle df:

ruta2: 
      Current SAN Prev.1m SAN Prev.2m SAN Prev.3m SAN Current TRE \ 

A     5   6   7   6   3 
B     6   5   7   6   6 
C     12   11   11   11   8 

Im Grunde, was ich möchte, ist die Datenrahmen und bleiben die Spalten zu filtern, die mit Current beginnen.

Dann würde der gewünschte Ausgang sein:

ruta2: 
      Current SAN Current TRE 

A     5   3 
B     6   6 
C     12   8 

Um dies zu tun, habe ich versucht, diese Filter aber gibt einen Wert Fehler:

ruta2=ruta2[~(ruta2.columns.str[:4].str.startswith('Prev'))] 

Antwort

1

Es Sie scheint benötigen:

ruta2=ruta2.loc[:, ~(ruta2.columns.str[:4].str.startswith('Prev'))] 
#same as 
#ruta2=ruta2.loc[:, ~ruta2.columns.str.startswith('Prev')] 
print (ruta2) 
    Current SAN Current TRE 
A   5   3 
B   6   6 
C   12   8 

Oder:

cols = ruta2.columns[ ~(ruta2.columns.str[:4].str.startswith('Prev'))] 
ruta2=ruta2[cols] 
print (ruta2) 
    Current SAN Current TRE 
A   5   3 
B   6   6 
C   12   8 

Aber wenn Bedarf nur Current Spalten verwenden filter (^ bedeutet Beginn der Zeichenfolge in regex):

ruta2=ruta2.filter(regex='^Current') 
print (ruta2) 
    Current SAN Current TRE 
A   5   3 
B   6   6 
C   12   8 
0
#filter the columns names starting with 'Current' 
ruta2[[e for e in ruta2.columns if e.startswith('Current')]] 
Out[383]: 
    Current SAN Current TRE 
A   5   3 
B   6   6 
C   12   8 

Oder Sie können eine Maske Array verwenden, um Spalten zu filtern:

ruta2.loc[:,ruta2.columns.str.startswith('Current')] 
Out[385]: 
    Current SAN Current TRE 
A   5   3 
B   6   6 
C   12   8 
Verwandte Themen