Python: создание пользовательского класса pd.dataframe - PullRequest
0 голосов
/ 12 марта 2020

Я хотел бы поставить некоторые стандартные задачи для фрейма данных panda, такие как инициализация с данными и обработка этих данных в классе. В настоящее время я выполняю следующие примеры шагов:

import pandas as pd
import urllib.request


def __get_data():
    URL = r'https://en.wikipedia.org/wiki/List_of_sovereign_states_' \
          r'and_dependent_territories_by_continent_(data_file)#Data_file'
    HTML_STRING = urllib.request.urlopen(URL)
    return pd.read_html(HTML_STRING)[2]


def __prepare_data(df):
    df.iloc[:,-1] = df.iloc[:,-1].str.upper()
    return df


MyDataFrame = pd.DataFrame()
MyDataFrame = __get_data()
MyDataFrame = __prepare_data(MyDataFrame)

Мне бы хотелось что-то подобное:

class MyDataFrame(pd.DataFrame):
    def __init__(self, *args, **kwargs):
        super(MyDataFrame, self).__init__(*args, **kwargs)
        self = self.__get_data()
        self.__prepare_data()

    def __get_data(self):
        URL = r'https://en.wikipedia.org/wiki/List_of_sovereign_states_' \
              r'and_dependent_territories_by_continent_(data_file)#Data_file'
        HTML_STRING = urllib.request.urlopen(URL)
        return pd.read_html(HTML_STRING)[2]

    def __prepare_data(self):
        self.iloc[:, -1] = self.iloc[:, -1].str.upper()

К сожалению, я не понимаю документацию Pandas в этом контексте.

1 Ответ

1 голос
/ 12 марта 2020

Хотя я считаю это необоснованным, эта модификация работает:

class MyDataFrame(pd.DataFrame):
    def __init__(self, *args, **kwargs):
        super(MyDataFrame, self).__init__(*args, **kwargs)
        self.data = self.__get_data()
        self.__prepare_data()

    def __get_data(self):
        URL = r'https://en.wikipedia.org/wiki/List_of_sovereign_states_' \
              r'and_dependent_territories_by_continent_(data_file)#Data_file'
        HTML_STRING = urllib.request.urlopen(URL)
        return pd.read_html(HTML_STRING)[2]

    def __prepare_data(self):
        self.data.iloc[:, -1] = self.data.iloc[:, -1].str.upper()

d = MyDataFrame()

print(d.data)

Вывод:

    CC  a-2 a-3     #       Name
0   AS  AF  AFG     4.0     AFGHANISTAN, ISLAMIC REPUBLIC OF
1   EU  AL  ALB     8.0     ALBANIA, REPUBLIC OF
2   AN  AQ  ATA     10.0    ANTARCTICA (THE TERRITORY SOUTH OF 60 DEG S)
3   AF  DZ  DZA     12.0    ALGERIA, PEOPLES DEMOCRATIC REPUBLIC OF
4   OC  AS  ASM     16.0    AMERICAN SAMOA
...     ...     ...     ...     ...     ...
257     AF  ZM  ZMB 894.0   ZAMBIA, REPUBLIC OF
258     AS  XD  NaN NaN     UNITED NATIONS NEUTRAL ZONE
259     AS  XE  NaN NaN     IRAQ-SAUDI ARABIA NEUTRAL ZONE
260     AS  XS  NaN NaN     SPRATLY ISLANDS
261     OC  XX  NaN NaN     DISPUTED TERRITORY
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...