首页 > 解决方案 > 如何在自定义类中模拟 pandas.DataFrame 索引?

问题描述

我想定义一个不继承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])

标签: pythonpandasdataframe

解决方案


它可能无法捕获 a 的所有行为DataFrame,但对于初学者来说,您可以实现__getattr__,或者更冒险的是,__getattribute__将属性请求传递给底层数据框:

class FalseDF:
    def __getattr__(self, key):
        return getattr(self.df, key)

推荐阅读