/ / Wählen Sie die Spalten, die die angegebene Zeichenfolge im Pandas-Datenrahmen enthalten [geschlossen] - Python, Regex, Pandas, Dataframe

Wählen Sie die Spalten aus, die die angegebene Zeichenfolge im Pandas-Datenrahmen enthalten [geschlossen] - Python, Regex, Pandas, Dataframe

Ich arbeite mit einem Pandas Datenrahmen, der eine große Reihe Spalten enthält. Ich möchte in der Lage sein, eine Reihe von Spalten auszuwählen, die eine Zeichenfolge enthalten, möglicherweise unter Verwendung eines regulären Ausdrucks.

Angenommen, ein Beispiel Datenrahmen df:

df = pd.DataFrame({"a_1": [1,2,3],"b": [2,3,4],"c_1": [3,4,5]})

a_1  b  c_1
0    1  2    3
1    2  3    4
2    3  4    5

Ich möchte nur die Spalten auswählen können, die mit enden _1 ergebend:

   a_1  c_1
0    1    3
1    2    4
2    3    5

Die Lösung könnte nach Möglichkeit verallgemeinert werden, um Spaltennamen gegen einen gegebenen regulären Ausdruck abzustimmen, so wie im obigen Beispiel ".*_1".

Antworten:

2 für die Antwort № 1

Dafür gibt es eine spezielle Methode - Datenframe.filter ():

In [178]: df.filter(regex=r"_1$")
Out[178]:
a_1  c_1
0    1    3
1    2    4
2    3    5

1 für die Antwort № 2

Benutzen boolean indexing mit Maske von endswith oder contains mit Regex:

df1 = df.loc[:, df.columns.str.endswith("_1")]
df1 = df.loc[:, df.columns.str.contains("_1$")]

df1 = df.loc[:, df.columns.str.contains(".*_1")]

print (df1)
a_1  c_1
0    1    3
1    2    4
2    3    5

0 für die Antwort № 3

Sie können das Listenverständnis verwenden, um Spalten auszuwählen, die mit enden _1:

df = pd.DataFrame({"a_1": [1,2,3], "b": [2,3,4], "c_1": [3,4,5]})
filter_col = [col for col in df if col.endswith("_1")]

df[filter_col]

a_1  c_1
0    1    3
1    2    4
2    3    5