Написание функции для одной строки кода? - PullRequest
0 голосов
/ 30 августа 2018

Я сейчас работаю с пандой DataFrame и столкнулся с проблемой. Должна ли быть отдельная функция для установки индекса или она делает код сложным, поскольку вы все равно можете просто написать одну строку кода.

def set_time_as_index(df):
    return df.set_index('time')

Упрощенная версия текущего кода:

def create_df_rdy_for_export(input_data):
    dframe = pd.DataFrame(input_data)
    dframe = set_time_as_index(dframe)
    return dframe

Или лучше написать:

def create_df_rdy_for_export(input_data):
    dframe = pd.DataFrame(input_data)
    dframe = dframe.set_index('time')
    return dframe

Я просто устанавливаю индекс на столбец time . И поскольку в сценарии он появляется только один раз, нет необходимости писать отдельную функцию, но я настолько привык к этому, что это кажется странным без функции. Есть ли какие-либо соглашения или компромиссы производительности?

1 Ответ

0 голосов
/ 30 августа 2018

Это вопрос, основанный на мнении, но я отвечу на него, поскольку существуют соглашения при работе с фреймами данных Pandas.

Обычная практика - цепные операции . Вы можете просто применять методы последовательно. Например (добавление дополнительного метода для ясности):

def create_df_rdy_for_export(input_data):
    dframe = pd.DataFrame(input_data)\
               .set_index('time')\
               .set_axis(['col1', 'col2', 'col3'], axis=1)
    return dframe

Каждая строка представляет отдельный метод. На мой взгляд, нет необходимости писать отдельную функцию для вызова одного метода. Для более сложных манипуляций с кадрами вы можете использовать pd.DataFrame.pipe. Например:

def format_dataframe(df):
    df = df.set_index('time')\
           .set_axis(['col1', 'col2', 'col3'], axis=1)
    return df

def create_df_rdy_for_export(input_data):
    dframe = pd.DataFrame(input_data).pipe(format_dataframe)
    return dframe

Преимущество здесь в том, что вы можете повторно использовать только часть манипуляции вашей логики для других целей, а pipe по-прежнему позволяет связывать дополнительные методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...