Мне нужны имена столбцов из фрейма данных, которые содержат термин «программное обеспечение» и «пакеты».
Я могу отфильтровать столбцы, содержащие одну строку, например:
software_cols = df.filter(regex='Software|software|SOFTWARE').columns
Как мне добиться того же, упомянув также «Пакеты/пакеты/ПАКЕТЫ».
Допустимые названия столбцов должны быть такими: «Локальные пакеты программного обеспечения», «Пакеты программного обеспечения XYZ», «Пакет программного обеспечения».
Будьте проще, поскольку здесь вам не нужно регулярное выражение, просто используйте две логические маски и независимое от регистра сравнение:
# 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')