Я работаю над сценарием для чтения и обработки данных из файлов Excel, и мне нужно отфильтровать строки, содержащие несколько строк.
В настоящее время метод фильтрации жестко задан для каждого типа листа Excel (каждыйТип листа получает один дочерний класс, который наследуется от родительского, который имеет дело с чтением файла и первой обработкой), который я читаю, но так как это становится очень утомительным, так как число листов, которые я должен проанализировать, растет, я ищуболее элегантное решение.
Прямо сейчас я реализовал его так:
def _find(self,find_str,column='Data1'):
return (self.df[column].str.find(find_str) > -1)
def filter(self):
self.df_filter = self.df[(self._find('This') | self._find('is'))
& self._find('an') | self._find('example')]
с переопределенным методом фильтра для каждого дочернего класса.Иногда логические (на самом деле двоичные) выражения могут быть очень длинными.
Есть ли согласованный, читаемый способ сократить это?Я думал о чем-то вроде передачи объекта, похожего на логическое выражение, в обобщенную функцию фильтра, например
gen_find(('This' | 'is') & 'an' | 'example')
(я знаю, что это точно будет плохой идеей, но вы понимаете, в чем суть)