如何在可以将numpy矩阵转换为熊猫框架的类中创建一个方法?

我正在尝试定义一个方法,我可以在其中从numpy矩阵转换为Pandas DataFrame。


我有以下几点:


import pandas as pd

import numpy as np


class Analisis():

    def __init__(self, matriz = np.array([])):

          self.__matriz = matriz

          self.__filas = matriz.shape[0]

          self.__columnas = matriz.shape[1]

    @property

    def matriz(self):

         return self.__matriz

    @property

    def filas(self):

         return self.__filas

    @property

    def columnas(self):

         return self.__columnas

    def as_data_frame (self):

        dataset = pd.DataFrame({'Columna1': data[:, 0], 'Columna2': data[:, 1], 'Columna3': 

        data[:, 2]})

        return dataset

我正在使用这个数组:


data = Analisis(np.array([[5,78,34],[6,2,8],[36,9,60]]))

print(data.filas)

print(data.columnas)

print(data.matriz)

Analisis.as_data_frame

但是我尝试了几种Analisis.as_data_frame组合,但它们不起作用。只是试图找到文档,似乎该方法是可以的,但不起作用。有什么想法吗?


元芳怎么了
浏览 114回答 1
1回答

慕姐8265434

由于您正在定义一个方法,因此您希望在对象上调用它:data.as_data_frame()但是你的定义使用 ,大概是全局变量。但您应该使用内部状态。所以,大概,你想要.dataself.__matriz题外话:停止使用双下划线和不必要的属性,所有这些都是样板,违背了整个目的。在Python中,你的类应该看起来像这样:propertyclass Analisis:    def __init__(self, matriz=None): # watch out for mutable default arguments        if matriz is None:            self.matriz = matriz        else:            self.matriz = np.array([])        self.filas = matriz.shape[0]        self.columnas = matriz.shape[1]现在关于你的方法,你想要:class Analisis:    def __init__(self, matriz=None): # watch out for mutable default arguments        if matriz is None:            self.matriz = np.array([])        else:            self.matriz = matriz        self.filas = matriz.shape[0]        self.columnas = matriz.shape[1]    def as_data_frame (self):        dataset = pd.DataFrame(            {                'Columna1': self.matriz[:, 0],                 'Columna2': self.matriz[:, 1],                 'Columna3': self.matriz[:, 2]            }        )        return dataset你可以简化你的方法,就像:    def as_data_frame (self):        dataset = pd.DataFrame(            self.matriz[:,:3],            columns=['Columna1','Columna2','Columna3']        )        return dataset请注意,二维数组始终可以直接转换为数据帧:>>> arr = np.array([[5,78,34],[6,2,8],[36,9,60]])>>> pd.DataFrame(arr, columns=['Columna1', 'Columna2', 'Columna3'])   Columna1  Columna2  Columna30         5        78        341         6         2         82        36         9        60我怀疑你真正想要的是更动态的东西,就像这样:    def as_data_frame (self):        columns = [f'Columna{i}' for i in range(1, self.columnas+1)]        dataset = pd.DataFrame(self.matriz, columns=columns)        return dataset在行动中:In [10]: class Analisis:    ...:    ...:     def __init__(self, matriz=None): # watch out for mutable default arguments    ...:         if matriz is None:    ...:             self.matriz = np.array([])    ...:         else:    ...:             self.matriz = matriz    ...:         self.filas = matriz.shape[0]    ...:         self.columnas = matriz.shape[1]    ...:    ...:     def as_data_frame (self):    ...:         columns = [f'Columna{i}' for i in range(1, self.columnas+1)]    ...:         dataset = pd.DataFrame(self.matriz, columns=columns)    ...:         return dataset    ...:    ...:In [11]: data = Analisis(np.array([[5,78,34],[6,2,8],[36,9,60]]))In [12]: data.as_data_frame()Out[12]:   Columna1  Columna2  Columna30         5        78        341         6         2         82        36         9        60
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python