Как расширить Pandas Dataframe для создания собственного класса, где он инициализируется с именем файла CSV? - PullRequest
0 голосов
/ 29 ноября 2018

Я хочу создать специальный тип объекта на основе объекта pandas.DataFrame, который всегда будет создаваться на основе определенного типа входного файла.

Мне удалось создать класс, который можетбыть создан так же, как обычный DataFrame, то есть:

class CustomDF(pd.DataFrame):
    ...

Obj = CustomDF({'a':[1,2],'b':[3,4]})

Но я хочу изменить поведение инициализации, чтобы принять имя файла CSV и импортировать его.Я знаю, что Pandas позволяет это, используя:

df = pd.read_csv(filename)

Но я не могу заставить его работать в моем новом классе, когда я делаю:

class CustomDF(pd.DataFrame):
    def  __init__(self, filename):
        self = pd.read_csv(filename)

И хотя я не вижу ошибкисоздать объект с этим классом, я получаю ошибку 'CustomDF' object has no attribute '_data' при попытке получить к нему доступ.

Я пытался изменить self = pd.read_csv(filename) на self._data = pd.read_csv(filename) или self.data = pd.read_csv(filename), но это не имеет никакого эффекта.

Как правильно это сделать?Есть ли лучший подход к тому же?

1 Ответ

0 голосов
/ 29 ноября 2018

Я попробовал ваш код, и я получил ошибку:

main : 4: UserWarning: Pandas не позволяет создавать столбцы с помощью нового имени атрибута - см.https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access

Это в основном означает, что у панд есть проблема, когда вы делаете следующий шаг

self.data = pd.read_csv(filename)

Причина в том, что ваш CustomDF является фреймом данных.Подумайте о кадре данных df.Когда вы df.someColumnName, вы получите значения этого столбца.когда вы пытаетесь сделать что-то вроде df.someColumnName = something, вы пытаетесь создать новый столбец.Вы не можете создать такой столбец.

Я удалил наследство pd.DataFrame в CustomDF, и он отлично работает.

import pandas as pd    
class CustomDF():
    def  __init__(self, filename):
        self.data = pd.read_csv(filename)

csdf = CustomDF("breast_cancer_wisconsin.csv")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...