Панды: найти столбец, имя которого содержит определенную строку



Итак, у меня есть фрейм данных с именами столбцов, и я хочу найти тот, который содержит определенную строку, но точно не соответствует ей. Я ищу 'spike' в именах столбцов, таких как 'spike-2','hey spike','spiked-in' (the 'spike' часть всегда постоянное).



Я хочу, чтобы имя столбца возвращалось в виде строки или переменной, поэтому я получаю доступ к столбцу позже с помощью df['name'] или df[name] как обычно. Я пытался найти способы сделать это, но безрезультатно. Какие-нибудь советы?

671   5  

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']

объяснение:

  1. df.columns возвращает список имен столбцов
  2. [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

    Ничего не найдено.