#python #pandas #list #iteration
#python #pandas #Список #итерация
Вопрос:
У меня есть довольно большой (57 тыс. строк) файл данных, к которому я регулярно обращаюсь, содержащий списки персонала и их наборы навыков. Я хотел бы передать список ключевых слов и вывести DF только со строками, в которых присутствовали эти ключи, например:
key_list = ('LEAN', 'SIGMA', 'Toyota')
for key in key_list:
df1 = df[df[col_key].str.contains(key, case=False)]
# col_key previously defined.
В приведенном выше случае я получу результаты только с Toyota. Чтобы захватить все ключи, мне нужно указать:
df1 = df[df[col_key].str.contains('sigma', case=False) |
df[col_key].str.contains('LEAN', case=False) |
df[col_key].str.contains('SIGMA', case=False) |
df[col_key].str.contains('Toyota', case=False)]
Создание его модульным для любой длины предоставленных ключей позволит быстрее обрабатывать запросы данных. Мне кажется, что я упускаю что-то глупое. Если есть более эффективный / питонический подход, я весь внимание. Спасибо!
Ответ №1:
Вы можете проверить каждое значение, содержит ли оно какое-либо из слов в списке ключей, вот пример:
df[df[col_key].apply(lambda x: any([word.lower() in x.lower() for word in key_list]))]
Комментарии:
1. Это сработало отлично! Большое вам спасибо. Честно говоря, мне нужно разбить это, чтобы по-настоящему понять, что происходит по пунктам, но я знаю достаточно, чтобы добавить его, и мои тестовые данные дали мне результаты, которые я ожидал.