Как фильтровать имена столбцов фрейма данных, содержащие две указанные подстроки?

Мне нужны имена столбцов из фрейма данных, которые содержат термин «программное обеспечение» и «пакеты». Я могу отфильтровать столбцы, содержащие одну строку, например: software_cols = df.filter(regex='Software|software|SOFTWARE').columns

Как мне добиться того же, упомянув также «Пакеты/пакеты/ПАКЕТЫ».

Допустимые названия столбцов должны быть такими: «Локальные пакеты программного обеспечения», «Пакеты программного обеспечения XYZ», «Пакет программного обеспечения».

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Будьте проще, поскольку здесь вам не нужно регулярное выражение, просто используйте две логические маски и независимое от регистра сравнение:

# does the column name contain "software"?
m1 = df.columns.str.contains('software', case=False)
# does it contain "package"?
m2 = df.columns.str.contains('package', case=False)

# if both conditions are met, keep the column
out = df.loc[:, m1&m2]

Пример ввода:

df = pd.DataFrame(columns=['Local Software Packages', 'Software XYZ Packages', 'Software Package', 'Other', 'Software only'], index=[0])

Выход:

  Local Software Packages Software XYZ Packages Software Package
0                     NaN                   NaN              NaN

Если вам просто нужны имена:

df.columns[m1&m2]
# Index(['Local Software Packages', 'Software XYZ Packages', 'Software Package'], dtype='object')

Другие вопросы по теме