Лучший способ структурировать серию df манипуляций в вашем классе - PullRequest
0 голосов
/ 04 июня 2018

Как вам лучше структурировать код в вашем классе так, чтобы ваш класс возвращал df, который вы хотите, но у вас нет основного метода, который вызывает много других методов последовательнопорядок.Я нахожу, что во многих ситуациях я прихожу к этой структуре, и это кажется плохим.У меня есть df, что я просто перезаписываю его результатами других базовых функций (которые я тестирую), пока не получу то, что хочу.

class A:
 def main(self):
   df = self.load_file_into_df()
   df = self.add_x_columns(df)
   df = self.calculate_y(df)
   df = self.calculate_consequence(df)
   ...
   return df

 def add_x_columns(df)
 def calculate_y(df)
 def calculate_consequence(df)
 ...

# now use it somewhere else
df = A().main()

1 Ответ

0 голосов
/ 04 июня 2018

труба

Одна функция, которую вы можете использовать: pd.DataFrame.pipe.Это считается «удручающим», потому что это облегчает цепочку операторов.

По моему мнению, вы должны отделить чтение данных в фрейм данных от манипулирования фреймом данных.Например:

class A:
    def main(self):
        df = self.load_file_into_df()

        df = df.pipe(self.add_x_columns)\
               .pipe(self.calculate_y)\
               .pipe(self.calculate_consequence)

    return df

compose

Композиция функций не является родной для Python, но сторонняя библиотека toolz предлагает эту функцию.Это позволяет вам лениво определять цепочечные функции.Обратите внимание на обратный порядок операций, то есть последний аргумент compose выполняется первым.

from toolz import compose

class A:
    def main(self)
        df = self.load_file_into_df()

        transformer = compose(self.calculate_consequence,
                              self.calculate_y,
                              self.add_x_columns)

        df = df.pipe(transformer)

    return df

На мой взгляд, compose предлагает гибкое и адаптируемое решение.Например, вы можете определить любое количество композиций и применять их выборочно или повторно в различных точках вашего рабочего процесса.

...