Эффективно ли объединять несколько фреймов данных, используя объединенное «соединение», а не слияние или объединение? - PullRequest
0 голосов
/ 05 октября 2018

Не будучи экспертом по эффективности кода (пока) и лучшему написанию кода на pythonic (пока), я хотел бы спросить экспертов здесь, является ли следующий код лучшим для join фреймов данных, имеющих общий индекс даты, илиесли слияние или конкат могут быть лучше:

data = df1.join(df2).join(df3).join(df4).join(df5).dropna()

Я использовал суффикс .dropna() в конце, чтобы отменить строки, в которых встречается один NaN.

Примечание: причина, по которой NaN возникает в этом наборе данных, заключается в том, что я создал кадры данных, которые фактически являются сдвинутыми версиями других кадров данных (с использованием .shift(n)), что означает, что NaN s закрадывается вглава сдвинутых информационных фреймов.

Я намерен использовать этот код во многих других приложениях, поэтому хотел использовать наилучшую возможную методологию (т.е. не использовать ненужное использование памяти, отнимать слишком много времени на обработку, использоватьправильные конструкции join / merg / concat).

1 Ответ

0 голосов
/ 05 октября 2018

Это должно быть более эффективно:

data = df1.join([df2, df3, df4, df5], how='inner')

Это объединит все кадры данных за один раз.Это также исключит любую строку, которая не имеет значений во всех фреймах данных (поэтому нет необходимости в dropna()).Значение по умолчанию для how равно 'left', что создает строку для каждой строки в вызывающем фрейме данных, заполняя все пропущенные значения NaN.Однако, если какой-либо из фреймов данных содержал NaN значений в них до объединения, вам все равно нужно будет использовать dropna().

. Вы также можете использовать on=..., чтобы выбрать столбцы, к которым нужно присоединиться.фреймы данных, если вы не хотите использовать индексы фреймов данных.

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