【问题标题】:How to add columns to pandas dataframe for class object in python如何在 python 中为类对象的熊猫数据框添加列
【发布时间】:2021-02-09 20:01:46
【问题描述】:

我想创建一个类对象来自动处理我的数据集

例如:

x = pd.DataFrame({'a':[1,2,3],"b":[4,5,6]})
class newdata(object):
    def __init__(self,dataset):
        self.a = dataset.a
        self.b = dataset.b
        self.dataset = dataset
    def add_column(self,c):
        self[c] = a
newdata(x).add_column("c")

但是,我得到一个错误:

'newdata' object does not support item assignment

而且,当我更改公式时,我得到一个新的错误

    def add_column(self,c):
        self[c] = a + 3

TypeError: unsupported operand type(s) for +: 'Cycle' and 'int'

如果我在课外编写代码,它可以工作

x['c'] = x.a
x['c'] = x.a +3

为什么它在类对象中不起作用?

【问题讨论】:

  • self.dataset[c] = self.a?

标签: python pandas dataframe class


【解决方案1】:

据我所知,不可能分配这样的属性:self[c] = a + 3。 我无法重现 TypeError,但要使用 newdata() 中的 a 属性,您必须编写 self.a,否则将不会定义 a。 将属性分配给实例有多种方法,其中一种是setattr()

def add_column(self, attr_name):
    setattr(self, attr_name, self.a + 3)

要将c 作为属性添加到类实例中,您可以这样做:

inst = newdata(x)
inst.add_column('c')

newdata(x).add_column('c') 但是仍然没有将您的数据框附加到c。您可以使用的一种解决方法是:

import pandas as pd

x = pd.DataFrame({'a':[1,2,3],"b":[4,5,6]})
y = pd.DataFrame({'c':[7,8,9]})

class newdata:
    def __init__(self, df) -> None:
        self.__dict__ = df.to_dict('series')

    def add_column(self, df):
        self.__dict__.update(df.to_dict('series'))
        return pd.DataFrame(self.__dict__)

df = newdata(x).add_column(y)

【讨论】:

    猜你喜欢
    • 2022-09-24
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多