为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

元芳怎么了 2022-09-06 18:10:43
我正在尝试定义一个方法,我可以在其中从numpy矩阵转换为Pandas DataFrame。我有以下几点:import pandas as pdimport numpy as npclass 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组合,但它们不起作用。只是试图找到文档,似乎该方法是可以的,但不起作用。有什么想法吗?
查看完整描述

1 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

由于您正在定义一个方法,因此您希望在对象上调用它:


data.as_data_frame()

但是你的定义使用 ,大概是全局变量。但您应该使用内部状态。所以,大概,你想要.dataself.__matriz


题外话:


停止使用双下划线和不必要的属性,所有这些都是样板,违背了整个目的。在Python中,你的类应该看起来像这样:property


class 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  Columna3

0         5        78        34

1         6         2         8

2        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  Columna3

0         5        78        34

1         6         2         8

2        36         9        60


查看完整回答
反对 回复 2022-09-06
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号