如何从Transaction类实例创建指定列的Pandas DataFrame?
从自定义Transaction类实例创建Pandas DataFrame的正确方法
首先先修正你代码里的几个问题:
- 类定义名称是
Transactions,但实例化时用了Transaction,名称不统一,需改成一致(比如统一为Transaction) add_money类方法的参数用了self,会和实例的self冲突,建议改为transaction- 类属性
amount和实例属性amount重名,容易混淆,改为total_amount更清晰
修正后的类代码:
class Transaction: num_of_transactions = 0 total_amount = 0 # 新增类属性存储所有交易实例,方便后续批量处理 all_transactions = [] def __init__(self, date, concept, amount): self.date = date self.concept = concept self.amount = amount Transaction.add_transaction() Transaction.add_money(self) Transaction.all_transactions.append(self) @classmethod def number_of_transactions(cls): return cls.num_of_transactions @classmethod def add_transaction(cls): cls.num_of_transactions += 1 @classmethod def total_amount_of_money(cls): return cls.total_amount @classmethod def add_money(cls, transaction): cls.total_amount += transaction.amount # 实例化交易对象 t1 = Transaction("20221128", "C1", 14) t2 = Transaction("20221129", "C2", 30) t3 = Transaction("20221130", "C3", 14)
接下来介绍两种创建符合要求的DataFrame的方法:
方法一:手动收集实例属性生成DataFrame
直接提取每个实例的date、concept、amount属性,构造字典传入pd.DataFrame:
import pandas as pd data = [ {"Date": t1.date, "Concept": t1.concept, "Amount": t1.amount}, {"Date": t2.date, "Concept": t2.concept, "Amount": t2.amount}, {"Date": t3.date, "Concept": t3.concept, "Amount": t3.amount} ] df = pd.DataFrame(data) print(df)
方法二:通过类的统一列表自动生成DataFrame
利用类里新增的all_transactions属性,批量提取所有实例的属性,适合后续新增交易实例的场景:
import pandas as pd data = [ {"Date": trans.date, "Concept": trans.concept, "Amount": trans.amount} for trans in Transaction.all_transactions ] df = pd.DataFrame(data) print(df)
两种方法最终都会生成包含Date、Concept、Amount三列的DataFrame,输出结果如下:
Date Concept Amount 0 20221128 C1 14 1 20221129 C2 30 2 20221130 C3 14
内容的提问来源于stack exchange,提问作者Adrià Martínez
相关产品推荐
相关产品推荐

