You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将嵌套对象结构的销售数据转换为Pandas DataFrame?

将自定义对象格式的销售数据转换为Pandas DataFrame

问题场景

现有如下格式的自定义对象销售数据,想要转换为Pandas DataFrame:

sales_data = Totalsales(
    product='y', 
    sales=(
        specificsite(product='y', sales_percent=70.0, location_zip='12345'), 
        specificsite(product='y', sales_percent=11.0, location_zip='23456'), 
        specificsite(product='y', sales_percent=45.0, location_zip='34567'), 
        specificsite(product='y', sales_percent=10.0, location_zip='45678')
    )
)

df = pd.DataFrame(sales_data)

运行后报错:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'Totalsales' object is not iterable

期望生成的DataFrame格式:

product  sales_percent location_zip
0       y           70.0        12345
1       y           11.0        23456
2       y           45.0        34567
3       y           10.0        45678

报错原因

Totalsales是自定义类的实例对象,本身不是可迭代结构,Pandas无法直接将其转换为DataFrame。需要先提取对象中存储实际数据的属性,再进行转换。

解决方法

首先提取sales_data中的sales属性(这是包含所有站点数据的元组),然后将每个specificsite对象转换为字典,最后传入pd.DataFrame:

完整代码示例

import pandas as pd

# 假设你的类定义如下(如果未定义需先确保类具备对应属性)
class specificsite:
    def __init__(self, product, sales_percent, location_zip):
        self.product = product
        self.sales_percent = sales_percent
        self.location_zip = location_zip

class Totalsales:
    def __init__(self, product, sales):
        self.product = product
        self.sales = sales

# 原始数据
sales_data = Totalsales(
    product='y', 
    sales=(
        specificsite(product='y', sales_percent=70.0, location_zip='12345'), 
        specificsite(product='y', sales_percent=11.0, location_zip='23456'), 
        specificsite(product='y', sales_percent=45.0, location_zip='34567'), 
        specificsite(product='y', sales_percent=10.0, location_zip='45678')
    )
)

# 转换为DataFrame
df = pd.DataFrame([site.__dict__ for site in sales_data.sales])
print(df)

说明

  • sales_data.sales获取到所有站点数据的元组
  • 每个specificsite对象通过__dict__属性获取其内部的属性键值对,组成字典列表
  • 将字典列表传入pd.DataFrame即可生成目标格式的表格

如果你的类是用dataclasses定义的,也可以用asdict方法更规范地转换对象为字典:

from dataclasses import dataclass, asdict
import pandas as pd

@dataclass
class specificsite:
    product: str
    sales_percent: float
    location_zip: str

@dataclass
class Totalsales:
    product: str
    sales: tuple

sales_data = Totalsales(
    product='y', 
    sales=(
        specificsite(product='y', sales_percent=70.0, location_zip='12345'), 
        specificsite(product='y', sales_percent=11.0, location_zip='23456'), 
        specificsite(product='y', sales_percent=45.0, location_zip='34567'), 
        specificsite(product='y', sales_percent=10.0, location_zip='45678')
    )
)

df = pd.DataFrame([asdict(site) for site in sales_data.sales])
print(df)

内容的提问来源于stack exchange,提问作者Mainland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:10:22