【发布时间】:2013-07-17 23:20:36
【问题描述】:
我正在尝试使用一些添加的构造函数创建一个类似于 pandas Dataframe 的类:
class ExtendedDataFrame(DataFrame):
def __init__(self):
super(ExtendedDataFrame, self).__init__() # without this I get a pandas error
@classmethod
def contructor1(cls, filename):
"Create DataFrame from file"
df = pd.read_csv(filename) # returns a DataFrame
df.__class__ = cls
return df
# more methods extending Dataframe ...
所以现在我可以做到:
ExtendedDataFrame.constructor1('table_xx.txt') # returns an ExtendedDataFrame instance
我希望能够以这种方式获取我的 Table 类的实例:
ExtendedDataFrame('table_xx.txt')
推荐的方法是什么?
换句话说,我正在尝试创建一个 ExtendedDataFrame 类,但一些 pandas 的方法(如 read_csv)返回一个 DataFrame,我希望返回一个 ExtendedDataFrame。
【问题讨论】:
-
您到底想达到什么目的?为什么不直接说
Table = pd.read_csv并使用它呢? -
我计划根据构建时传递的参数(文件名类型)使用 pd.read_csv 或 pd.read_fwf,我还计划用其他方法扩展类。
-
如果只是文件名区分,请在外部执行此操作或定义一个返回数据帧的简单函数。除了区分输入数据格式之外,您还需要
Table类做什么? -
那么你有两件事:1) 使用新的 DataFrame-y 方法扩展 DataFrame,以及 2) 预填充 DataFrame 的工厂函数......嗯......我不会不要对调用
Table()如此挂心......只要有一个聪明的DataFrame.smart_load()并让它在内部调用私有方法来加载数据,而不是搞乱__init__以及以后在获取DataFrame 时可能发生的任何混淆和你的扩展 DataFrame 一起很好地交互...... -
查看this github issue,过去有一些关于对数据帧进行子类化等的讨论,希望将来会更容易。