Как эмулировать индексирование pandas.DataFrame из пользовательского класса? - PullRequest
0 голосов
/ 02 мая 2018

Я хочу определить класс, который не наследуется от pandas.DataFrame, но иногда действует как он. Например, я могу сделать:

import pandas
import numpy

class FalseDF(object):
    def __init__(self, df):
        self.df = df

    def __getitem__(self, item):
        return self.df.__getitem__(item)


df = pandas.DataFrame(numpy.reshape(numpy.arange(10), (2, 5)))
print(df)

, что дает:

   0  1  2  3  4
0  0  1  2  3  4
1  5  6  7  8  9

и сейчас:

fdf = FalseDF(df)
print(fdf[3])

дает:

0    3
1    8
Name: 3, dtype: int64    

Как теперь сделать так, чтобы следующий синтаксис также работал?

    print(fdf.iloc[1])

или

    print(fdf.loc[2])

1 Ответ

0 голосов
/ 02 мая 2018

Это может не охватить все поведение DataFrame, но для начала вы можете реализовать __getattr__ или, что гораздо более рискованно, __getattribute__ для передачи запросов для атрибутов базового фрейма данных:

class FalseDF:
    def __getattr__(self, key):
        return getattr(self.df, key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...