如何将epd:amount下的OrderedDict转换为指定列的pandas DataFrame
解决方案
直接通过pandas原生的DataFrame构造方法即可实现需求,无需复杂的遍历处理,示例代码如下:
from collections import OrderedDict import pandas as pd # 替换为你实际存储原始OrderedDict的变量名,这里用raw_data指代你提供的原始数据 raw_data = OrderedDict([('epd:amount', [OrderedDict([('@xmlns:epd', 'http://www.iai.kit.edu/EPD/2013'), ('@epd:module', 'A1'), ('#text', '0.0')]), OrderedDict([('@xmlns:epd', 'http://www.iai.kit.edu/EPD/2013'), ('@epd:module', 'A2'), ('#text', '0.0')]), OrderedDict([('@xmlns:epd', 'http://www.iai.kit.edu/EPD/2013'), ('@epd:module', 'A3'), ('#text', '0.927477418791169')]), OrderedDict([('@xmlns:epd', 'http://www.iai.kit.edu/EPD/2013'), ('@epd:module', 'A1-A3'), ('#text', '0.927477418791169')]), OrderedDict([('@xmlns:epd', 'http://www.iai.kit.edu/EPD/2013'), ('@epd:module', 'A5'), ('#text', '5.83315996933576')]), OrderedDict([('@xmlns:epd', 'http://www.iai.kit.edu/EPD/2013'), ('@epd:module', 'C2'), ('#text', '0.0')]), OrderedDict([('@xmlns:epd', 'http://www.iai.kit.edu/EPD/2013'), ('@epd:module', 'C3'), ('#text', '0.0')]), OrderedDict([('@xmlns:epd', 'http://www.iai.kit.edu/EPD/2013'), ('@epd:module', 'D'), ('@epd:scenario', 'energetisch'), ('#text', '0.0')]), OrderedDict([('@xmlns:epd', 'http://www.iai.kit.edu/EPD/2013'), ('@epd:module', 'D'), ('@epd:scenario', 'stofflich'), ('#text', '0.0')])])]) # 提取epd:amount对应的字典列表 amount_list = raw_data['epd:amount'] # 生成DataFrame时直接指定要保留的三列,自动过滤多余字段(比如@epd:scenario) df = pd.DataFrame(amount_list, columns=['@xmlns:epd', '@epd:module', '#text']) # 若需要将#text列转换为数值类型,可补充以下代码 # df['#text'] = pd.to_numeric(df['#text'])
上述代码生成的DataFrame会严格保留要求的3列,部分条目携带的额外字段会被自动排除。
内容的提问来源于stack exchange,提问作者user12007516
相关产品推荐
相关产品推荐

