it-swarm.com.de

Löschen Sie Spalten, deren Name eine bestimmte Zeichenfolge enthält, aus Pandas DataFrame

Ich habe einen Pandas-Datenrahmen mit den folgenden Spaltennamen:

Ergebnis1, Test1, Ergebnis2, Test2, Ergebnis3, Test3 usw.

Ich möchte alle Spalten löschen, deren Name das Wort "Test" enthält. Die Anzahl solcher Spalten ist nicht statisch, sondern hängt von einer vorherigen Funktion ab.

Wie kann ich das machen?

40
import pandas as pd

import numpy as np

array=np.random.random((2,4))

df=pd.DataFrame(array, columns=('Test1', 'toto', 'test2', 'riri'))

print df

      Test1      toto     test2      riri
0  0.923249  0.572528  0.845464  0.144891
1  0.020438  0.332540  0.144455  0.741412

cols = [c for c in df.columns if c.lower()[:4] != 'test']

df=df[cols]

print df
       toto      riri
0  0.572528  0.144891
1  0.332540  0.741412
32
Nic

Hier ist ein guter Weg dazu:

df = df[df.columns.drop(list(df.filter(regex='Test')))]
79

Verwenden Sie die DataFrame.select-Methode:

In [38]: df = DataFrame({'Test1': randn(10), 'Test2': randn(10), 'awesome': randn(10)})

In [39]: df.select(lambda x: not re.search('Test\d+', x), axis=1)
Out[39]:
   awesome
0    1.215
1    1.247
2    0.142
3    0.169
4    0.137
5   -0.971
6    0.736
7    0.214
8    0.111
9   -0.214
7
Phillip Cloud

Sie können die von Ihnen gewünschten Spalten mit 'filter' herausfiltern

import pandas as pd
import numpy as np

data2 = [{'test2': 1, 'result1': 2}, {'test': 5, 'result34': 10, 'c': 20}]

df = pd.DataFrame(data2)

df

    c   result1     result34    test    test2
0   NaN     2.0     NaN     NaN     1.0
1   20.0    NaN     10.0    5.0     NaN

Jetzt filtern

df.filter(like='result',axis=1)

Erhalten..

   result1  result34
0   2.0     NaN
1   NaN     10.0
6
SAH

Dies kann in einer Zeile mit:

df = df.drop(df.filter(regex='Test').columns, axis=1)
2
Warren O'Neill

In neueren Versionen von Pandas können Sie String-Methoden für den Index und die Spalten verwenden. str.startswith scheint hier eine gute Passform zu sein.

So entfernen Sie alle Spalten, die mit einem bestimmten Teilstring beginnen:

df.columns.str.startswith('Test')
# array([ True, False, False, False])

df.loc[:,~df.columns.str.startswith('Test')]

  toto test2 riri
0    x     x    x
1    x     x    x

Für den Vergleich zwischen Groß- und Kleinschreibung können Sie den regex-basierten Abgleich mit str.contains mit einem SOL -Anker verwenden:

df.columns.str.contains('^test', case=False)
# array([ True, False,  True, False])

df.loc[:,~df.columns.str.contains('^test', case=False)] 

  toto riri
0    x    x
1    x    x

wenn mixed-types möglich ist, geben Sie auch na=False an.

1
coldspeed