Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Просто перейдите по 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

Ответ 2

Этот ответ использует метод DataFrame.filter для этого без понимания списка:

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)

Выведет только "шип-2". Вы также можете использовать регулярное выражение, как некоторые люди предложили в комментариях выше:

print(df.filter(regex='spike|spke').columns)

Выведет обе колонки: ['spike-2', 'hey spke']

Ответ 3

Вы также можете использовать 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'

Подробнее о pandas.Series.str.contains.

Ответ 4

# select columns containing 'spike'
df.filter(like='spike', axis=1)

Вы также можете выбрать по имени, регулярное выражение. Обратитесь к: pandas.DataFrame.filter

Ответ 5

Вы также можете использовать этот код:

spike_cols =[x for x in df.columns[df.columns.str.contains('spike')]]

Ответ 6

df.loc[:,df.columns.str.contains("spike")]