首页 > 解决方案 > 使用 pandas 中的 read_csv 在 Python 中创建 pandas.DataFrame 子类的实例

问题描述

我正在pandas.DataFrame通过继承添加一些功能:

import pandas as pd
class my_class(pd.DataFrame):
    def __init__(self, *args):
        super().__init__(*args)
    def my_func(self):
        print('New function!')

但我还是想用它pandas.read_csv来加载数据框。我在这里检查过,似乎不鼓励简单地将实例更改__class__为。有一个更好的方法吗?谢谢!pandas.DataFramemy_class


特别是对于上面引用的类,我可以使用data参数 inpandas.DataFrame.__init__来传递 in 的结果pandas.read_csv,但是如果该参数不可用我该怎么办?

标签: pythonpandasdataframeoopinheritance

解决方案


在您的类声明中,您缺少def __new__(cls,...)初始化实例的 dunder 方法。这应该有效:

import pandas as pd
class my_class(pd.DataFrame):
    def __new__(cls, *args, **kwargs):
        return super().__new__(cls)
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
    def my_func(self):
        print('New function!')

不确定,这就是它所要求的,但如果你创建自己的pandas.DataFrame,你可以通过在阅读后初始化它来将新的“read_csv(file)”读取数据帧“转换”为自定义数据帧。因此,通过上述声明,这有效:

my_class({'test_col': [1,2,3]}).to_csv('test_my_class.csv')

df = pd.read_csv('test_my_class.csv')

my_class(df)

推荐阅读