如何将DataFrame字典列的键值对转换为新结构化DataFrame?
提取DataFrame嵌套字典列生成新DataFrame
需求说明
现有DataFrame的schedules列存储着嵌套字典,需要将所有行中字典的键值对提取出来,生成指定结构的新DataFrame:
初始状态
>>> df['schedules'] 0 {'3263524': 'Group 1 CORE DAYS', '3263525': 'Group 1 CORE NIGHTS', '3263526': 'Group 1 EDUCATION', '3263527': 'Group 1 ROUNDING'} 1 {'3263524': 'Group 1 CORE DAYS', '3881368': 'VS Days', '3881370': 'VS Education Shift A', '3881455': 'VS Education Shift B'} ...
期望输出
>>> df_schedules id schedule_name 0 3263524 Group 1 CORE DAYS 1 3263525 Group 1 CORE NIGHTS 2 3263526 Group 1 EDUCATION 3 3263527 Group 1 ROUNDING 4 3881368 VS Days 5 3881370 VS Education Shift A 6 3881455 VS Education Shift B
解决方案
你之前的方法仅处理了单行数据,要实现全量提取,可通过以下代码完成:
# 遍历schedules列的每个字典,转换为带指定列名的DataFrame individual_dfs = [pd.DataFrame.from_dict(item, orient='index', columns=['schedule_name']) for item in df['schedules']] # 合并所有单行结果 df_schedules = pd.concat(individual_dfs) # 将原索引(字典的键)转为id列,并重置行索引 df_schedules = df_schedules.reset_index(names='id').reset_index(drop=True)
代码说明
- 用列表推导式遍历
schedules列的每个字典,通过orient='index'将字典的键设为临时索引,值存入schedule_name列 pd.concat()将所有单行生成的小DataFrame合并为一个完整表reset_index(names='id')把临时索引(原字典的键)转为正式的id列,再用reset_index(drop=True)生成从0开始的连续行索引
内容的提问来源于stack exchange,提问作者skohrs
相关产品推荐
相关产品推荐

