您可以通过首先创建一个字典列表,从事务对象列表创建一个 DataFrame,其中每个字典代表 DataFrame 中的一行,并具有与列相对应的键。这是一种方法:
import pandas as pd
# Create a list of Transaction objects
transactions = [t1, t2, t3]
# Create a list of dictionaries, where each dictionary represents a row in the DataFrame
data = []
for t in transactions:
row = {"Date": t.date, "Concept": t.concept, "Amount": t.amount}
data.append(row)
# Create a DataFrame from the list of dictionaries, specifying the columns in the desired order
df = pd.DataFrame(data, columns=["Date", "Concept", "Amount"])
# Print the DataFrame
print(df)
这应该会产生一个如下所示的 DataFrame:
| | Date | Concept | Amount |
|---:|:---------|:----------|:---------|
| 0 | 20221128 | C1 | 14 |
| 1 | 20221129 | C2 | 30 |
| 2 | 20221130 | 3 | 14 |
上面的代码假定 Transaction 类的定义如您在问题中所示,使用 __init__ 方法以及您包含的类变量和方法。请注意,我已将类定义中的Transaction替换为Transactions以匹配类名,并且我还将add_money方法的self参数更改为transaction,以避免与self实例方法的参数。 DataFrame 函数不是类定义的一部分,而是被定义为一个单独的函数,它将 Transaction 对象列表作为其参数。
您还可以向 Transactions 类添加一个类方法,该方法返回一个表示该类所有实例的 DataFrame。为此,您可以添加一个类变量 transactions_list 来跟踪该类的所有实例,以及一个类方法 to_dataframe 将 transactions_list 转换为 DataFrame。
这是实现它的一种方法:
import pandas as pd
class Transactions:
num_of_transactions = 0
amount = 0
transactions_list = [] # Class variable to store all instances of the class
def __init__(self, date, concept, amount):
self.date = date
self.concept = concept
self.amount = amount
# Add the instance to the transactions_list
self.transactions_list.append(self)
Transactions.add_transaction()
Transactions.add_money(self)
@classmethod
def number_of_transactions(cls):
return cls.num_of_transactions
@classmethod
def add_transaction(cls):
cls.num_of_transactions += 1
@classmethod
def amount_of_money(cls):
return cls.amount
@classmethod
def add_money(cls, self):
cls.amount += self.amount
@classmethod
def to_dataframe(cls):
# Create a list of dictionaries representing each transaction
transactions_list = [{'Date': t.date, 'Concept': t.concept, 'Amount': t.amount} for t in cls.transactions_list]
# Create a DataFrame from the list of dictionaries
df = pd.DataFrame(transactions_list)
return df
# Create some transactions
t1 = Transactions("20221128", "C1", 14)
t2 = Transactions("20221129", "C2", 30)
t3 = Transactions("20221130", "3", 14)
然后,您可以调用类方法to_dataframe 来获取表示所有交易的 DataFrame:
df = Transactions.to_dataframe()
这应该创建一个 DataFrame df,其中包含列 'Date'、'Concept' 和 'Amount' 以及对应于每个事务的行。