如何从自定义对象列表创建指定列的Pandas DataFrame
解决方案:将自定义对象列表转换为指定列的Pandas DataFrame
你的需求完全可行,问题出在直接将自定义对象列表传入pd.DataFrame.from_records时,Pandas无法自动匹配你需要的属性与目标列名,且对象的属性名和你指定的列名不对应(比如你要fixtureID,但对象里对应的是source_market_id)。
具体实现步骤
核心思路是先遍历对象列表,提取每个对象中与目标列对应的属性值,构造符合要求的字典列表,再转换为DataFrame。同时按你的期望输出处理selectionID的格式(将原source_selection_id的最后三位替换为0):
import pandas as pd # 遍历对象列表,构造数据字典 data = [] for obj in ddf_list: # 处理selectionID格式:截取前n位并补三个0 processed_selection_id = obj.source_selection_id[:-3] + '000' data.append({ 'fixtureID': obj.source_market_id, 'marketID': obj.source_market_type_id, 'selectionID': processed_selection_id, 'competitorID': obj.competitor_id }) # 转换为DataFrame df = pd.DataFrame(data)
也可以用更简洁的列表推导式写法:
df = pd.DataFrame([ { 'fixtureID': obj.source_market_id, 'marketID': obj.source_market_type_id, 'selectionID': obj.source_selection_id[:-3] + '000', 'competitorID': obj.competitor_id } for obj in ddf_list ])
结果验证
执行后得到的DataFrame结构将完全符合你的期望:
| fixtureID | marketID | selectionID | competitorID |
|---|---|---|---|
| 101609040945 | 10160 | 10904094552946000 | 1052946019 |
| 101609040945 | 10160 | 10904094552600600 | 1052600648 |
| 101609040945 | 10160 | 10904094553052300 | 1053052373 |
内容的提问来源于stack exchange,提问作者Robsmith
相关产品推荐
相关产品推荐

