Pandy: znajdź kolumnę, której nazwa zawiera określony ciąg znaków
Więc mam ramkę danych z nazwami kolumn i chcę znaleźć tę, która zawiera określony ciąg znaków, ale nie do końca go pasuje. Szukam 'spike'
w nazwach kolumn jak 'spike-2'
, 'hey spike'
, 'spiked-in'
('spike'
część jest zawsze ciągła).
Chcę, aby nazwa kolumny była zwracana jako łańcuch znaków lub zmienna, więc uzyskam dostęp do kolumny później za pomocą df['name']
lub df[name]
Jak zwykle. Próbowałem znaleźć sposób, aby to zrobić, bez skutku. Jakieś wskazówki?
5 answers
Po prostu iteruj DataFrame.columns
, Teraz jest to przykład, w którym skończysz z listą nazw kolumn, które pasują:
import pandas as pd
data = {'spike-2': [1,2,3], 'hey spke': [4,5,6], 'spiked-in': [7,8,9], 'no': [10,11,12]}
df = pd.DataFrame(data)
spike_cols = [col for col in df.columns if 'spike' in col]
print(list(df.columns))
print(spike_cols)
Wyjście:
['hey spke', 'no', 'spike-2', 'spiked-in']
['spike-2', 'spiked-in']
Wyjaśnienie:
-
df.columns
zwraca listę nazw kolumn -
[col for col in df.columns if 'spike' in col]
iteruje na liściedf.columns
ze zmiennącol
i dodaje ją do listy wynikowej, Jeślicol
zawiera'spike'
. Składnia ta to rozumienie listy .
Jeśli chcesz tylko Wynikowy zestaw danych z kolumnami ten mecz możesz to zrobić:
df2 = df.filter(regex='spike')
print(df2)
Wyjście:
spike-2 spiked-in
0 1 7
1 2 8
2 3 9
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-22 14:59:06
Ta odpowiedź używa ramki danych.metoda filtrowania, aby to zrobić bez zrozumienia listy:
import pandas as pd
data = {'spike-2': [1,2,3], 'hey spke': [4,5,6]}
df = pd.DataFrame(data)
print(df.filter(like='spike').columns)
Wyświetli tylko 'spike-2'. Możesz również użyć regex, jak niektórzy sugerowali w komentarzach powyżej:
print(df.filter(regex='spike|spke').columns)
Wyświetli obie kolumny: ['spike-2','hey spke']
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:30
Możesz również użyć df.columns[df.columns.str.contains(pat = 'spike')]
data = {'spike-2': [1,2,3], 'hey spke': [4,5,6], 'spiked-in': [7,8,9], 'no': [10,11,12]}
df = pd.DataFrame(data)
colNames = df.columns[df.columns.str.contains(pat = 'spike')]
print(colNames)
Wyświetli nazwę kolumny: 'spike-2', u'spiked-in'
Więcej o pandach.Seria.str.zawiera .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 04:26:45
Możesz również użyć tego kodu:
spike_cols =[x for x in df.columns[df.columns.str.contains('spike')]]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-02 13:09:20
# select columns containing 'spike'
df.filter(like='spike', axis=1)
Możesz również wybrać według nazwy, Wyrażenie regularne. Zobacz: pandy.Ramka danych.filtr
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-02 11:40:45