Панды: найти столбец, имя которого содержит определенную строку
Итак, у меня есть фрейм данных с именами столбцов, и я хочу найти тот, который содержит определенную строку, но точно не соответствует ей. Я ищу 'spike' в именах столбцов, таких как 'spike-2','hey spike','spiked-in' (the 'spike' часть всегда постоянное).
Я хочу, чтобы имя столбца возвращалось в виде строки или переменной, поэтому я получаю доступ к столбцу позже с помощью df['name'] или df[name] как обычно. Я пытался найти способы сделать это, но безрезультатно. Какие-нибудь советы?
5 ответов:
просто повторите
DataFrame.columns, теперь это пример, в котором вы получите список имен столбцов, которые соответствуют: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)выход:
['hey spke', 'no', 'spike-2', 'spiked-in'] ['spike-2', 'spiked-in']объяснение:
df.columnsвозвращает список имен столбцов[col for col in df.columns if 'spike' in col]перебирает списокdf.columnsпеременнаяcolи добавляет его в результирующий список, еслиcolсодержит'spike'. Этот синтаксис понимание.если вы хотите только результирующий набор данных со столбцами, которые соответствуют можно сделать так:
df2 = df.filter(regex='spike') print(df2)выход:
spike-2 spiked-in 0 1 7 1 2 8 2 3 9
ответ использует фрейм данных.метод фильтра для этого без понимания списка:
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)выведет только 'spike-2'. Вы также можете использовать регулярное выражение, как некоторые люди предложили в комментариях выше:
print(df.filter(regex='spike|spke').columns)выведет оба столбца: ['spike-2', 'hey spke']
вы также можете использовать
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)это выведет имена столбцов:
'spike-2', u'spiked-in'подробнее о панды.Серии.ул.содержит.
вы также можете использовать этот код:
spike_cols =[x for x in df.columns[df.columns.str.contains('spike')]]
# select columns containing 'spike' df.filter(like='spike', axis=1)вы также можете выбрать по имени, по регулярному выражению. См.:панды.Фрейм данных.фильтр
Comments