如何将同键多值字典转换为指定结构的Pandas DataFrame
解决方案:合并多字典为指定结构DataFrame
问题背景
你有多个键完全相同的字典,分别存储职位的职责、示例头衔、主要工作内容等信息,需要将它们合并成以职位为行、各字典值为列的DataFrame,目标结构如下:
| Job Position | Job Role | Example Titles | Main Duties |
|---|---|---|---|
| 00010 – Legislators | ['Legislators participate in...'] | ['Cabinet minister', 'City councillor', ...] | ['Enact, amend or repeal laws and regulations', ...] |
| 00011 – Senior government managers and officials | ['Senior government managers...'] | ['Assistant deputy minister', ...] | ['Establish objectives for the organization...'] |
原代码问题
你之前的from_records用法错误,因为from_records需要的是记录列表(每个元素是一行数据),而你传入的是多个字典(每个字典是一列数据),所以无法得到预期结构。
正确实现代码
基础版(直接合并)
import pandas as pd # 假设你的字典变量名分别为:dict_job_role(职位职责)、dict_example_titles(示例头衔)、dict_main_duties(主要工作内容) # 先将每个字典转为Series,索引为职位名称 s_role = pd.Series(dict_job_role, name='Job Role') s_titles = pd.Series(dict_example_titles, name='Example Titles') s_duties = pd.Series(dict_main_duties, name='Main Duties') # 如果还有其他字典(employment_requirements等),同理转为Series # 按列合并所有Series df = pd.concat([s_role, s_titles, s_duties], axis=1) # 将索引转为单独的Job Position列 df.reset_index(inplace=True) df.rename(columns={'index': 'Job Position'}, inplace=True) print(df)
优化版(清理冗余换行/空元素)
原字典中的示例头衔和主要工作内容包含大量空字符串和换行,可提前过滤:
import pandas as pd # 定义清理函数:过滤列表中的空字符串和纯换行元素 def clean_list(lst): return [item.strip() for item in lst if item.strip()] # 清理每个字典的值 cleaned_role = {k: v for k, v in dict_job_role.items()} # 职责列表无需清理 cleaned_titles = {k: clean_list(v) for k, v in dict_example_titles.items()} cleaned_duties = {k: clean_list(v) for k, v in dict_main_duties.items()} # 转为Series并合并 s_role = pd.Series(cleaned_role, name='Job Role') s_titles = pd.Series(cleaned_titles, name='Example Titles') s_duties = pd.Series(cleaned_duties, name='Main Duties') df = pd.concat([s_role, s_titles, s_duties], axis=1).reset_index().rename(columns={'index': 'Job Position'}) print(df)
代码说明
- 字典转Series:每个字典的键会自动成为Series的索引(即职位名称),值对应列的内容,同时给Series指定列名方便后续合并。
- concat合并:
axis=1表示按列合并,确保相同职位的信息对齐。 - 重置索引:把原来的职位索引转为单独的
Job Position列,符合目标表格结构。 - 清理数据:
clean_list函数过滤掉列表中的空字符串和纯换行,让最终表格的数据更整洁。
内容的提问来源于stack exchange,提问作者gmohor21
相关产品推荐
相关产品推荐

