如何从Python DataFrame单列的字典数据中提取字段并制表?
提取DataFrame中字典字段并转为结构化表格的方法
我运行以下Python代码后得到一个48行1列的pandas DataFrame,该列每行都是包含duration等12个字段的字典。现在需要把这些字典里的字段提取出来,整理成结构化的表格,该怎么做?
代码示例
# 导入库 import amberelectric from amberelectric.api import amber_api import pandas as pd configuration = amberelectric.Configuration(access_token='psk_954ef8ead8c4323b4fe73064186f6362') # 创建API实例 api = amber_api.AmberApi.create(configuration) sites = api.get_sites() site_id = sites[0].id today = api.get_prices(site_id) # 生成DataFrame data = pd.DataFrame(today) print(type(data)) print(data.shape) data1 = data.iloc[[0,1,2,3]] print(data1)
运行输出
<class 'pandas.core.frame.DataFrame'> (48, 1) 0 0 {'duration': 30.0, 'spot_per_kwh': 10.16542, '... 1 {'duration': 30.0, 'spot_per_kwh': 8.92124, 'p... 2 {'duration': 30.0, 'spot_per_kwh': 6.51428, 'p... 3 {'duration': 30.0, 'spot_per_kwh': 4.74366, 'p...
解决方案
这里提供三种高效的实现方法,任选其一即可:
方法1:使用pd.json_normalize()(推荐)
这是处理字典格式数据最简洁的方式,直接将字典列标准化为结构化表格:
# 提取字典列并转换 structured_df = pd.json_normalize(data[0])
说明:pd.json_normalize()会自动识别字典中的所有键,将其作为新DataFrame的列名,对应的值填充到各行,最终生成48行12列的结构化表格。
方法2:使用apply(pd.Series)
如果你的pandas版本较低,可通过apply方法将每个字典转为Series:
structured_df = data[0].apply(pd.Series)
说明:对列中的每个字典执行pd.Series操作,会把字典的键映射为列,值映射为对应行的元素,最终拼接成完整的结构化DataFrame。
方法3:转为字典列表后构造DataFrame
先将列中的字典提取为列表,再直接构造新的DataFrame:
# 将Series转为字典列表 dict_list = data[0].tolist() # 构造结构化DataFrame structured_df = pd.DataFrame(dict_list)
说明:tolist()把原列转换为字典组成的列表,pd.DataFrame()会自动将每个字典作为一行,键作为列名完成转换。
验证结果
运行上述任意方法后,执行print(structured_df.head())即可查看前几行结构化数据,确认每个字段都已成为独立列。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

