Как переписать метод слияния в пандах? - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь настроить метод слияния в пандах для своих нужд.В основном мне нужно проверить, не приводит ли слияние к умножению строк, и если это так, записать соответствующую информацию в мой логгер.Я могу редактировать исходный код Pandas, но это явно не правильный способ сделать это.

Я пытался создать собственный метод слияния с расширением класса DataFrame и слиянием патча обезьяны в моих модулях, например:

pd.DataFrame = myDataFrameWithCustomMerge

Это работает, если я создаю df с помощью конструктора pd.DataFrame (), но это не перезаписывает слияние для моих фреймов данных, поскольку я создаю их с использованием синтаксиса pd.read_sql() или pd.read_excel().

Я также пыталсяизмените sys.module['pandas'], чтобы перезаписать DataFrame глобально, но это тоже не сработало.Единственный способ, который я нашел, - переписать слияние в исходных файлах.

1 Ответ

0 голосов
/ 06 сентября 2018

Просто создайте новый класс, который наследуется от pd.DataFrame:

class NoMergeDf(pd.DataFrame):
    def merge():
        print('Overriding!')

df = NoMergeDf(pd.read_excel(path))
df.merge() # prints 'Overriding!'

EDIT

если вы не хотите проводить рефакторинг всего, вы можете создать модуль с именем pd2:

import pandas as pd

class NoMergeDf(pd.DataFrame):
    def merge():
        print('Overriding!')

def read_sql(*args, **kwargs):
    return NoMergeDf(pd.read_sql(*args, **kwargs))

def read_excel(*args, **kwargs):
    return NoMergeDf(pd.read_excel(*args, **kwargs))

Тогда вам нужно только изменить места, где называются read_sql и read_excel.

РЕДАКТИРОВАТЬ 2

Я только что понял, что вышеупомянутое означает также обертывание любого другого метода DataFrame, потому что любое переназначение, такое как df = df[[col1, col2]], вернет df в DataFrame pandas.

Решение, которое вызывает наименьшую боль, заключается в написании пользовательского merge(df1, df2), который делает то, что вы хотите, а затем просто рефакторинг частей, где вы вызываете DataFrame.merge.

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