如何将单键字典列表数据写入Excel同一行的对应列?
问题:多个单键值对字典转Excel时数据错位/单列多行的解决方法
我有一个由多个单键值对字典组成的data_list,用pandas写入Excel时遇到两个问题:
- 直接转DataFrame后写入,每行仅一个列有值,其余为空(数据错位)
- 用循环追加的方式,所有数据被写入同一列的多行中
期望效果:将所有字典的键作为Excel列名,对应值填充在同一行的对应列中。
尝试过的代码
第一段代码(数据错位)
df = pd.DataFrame(data_list) name_exel = 'HomeOwners_results.xlsx' df.to_excel(name_exel,index=False, header=True,startrow=0,startcol=0)
第二段代码(单列多行)
df = pd.DataFrame(columns=['Column']) for item in data_list: for key, value in item.items(): df = df.append({'Column': value}, ignore_index=True) name_excel = 'HomeOwners_results.xlsx' df.to_excel(name_excel, index=False, header=False) print(df)
问题根源
你的data_list结构是多个单键值对字典(比如[{'姓名': '张三'}, {'年龄': 25}, {'职业': '程序员'}]):
- 第一段代码中,
pd.DataFrame(data_list)会把每个字典单独作为一行,导致每行仅对应一个列有值; - 第二段代码循环追加时,所有值都被塞进同一个列,自然变成单列多行。
正确实现代码
核心逻辑是把多个单键值对字典合并成一个完整字典,再转成DataFrame(此时会生成一行数据,键对应列名)。
方法1:字典推导式合并(简洁版)
import pandas as pd # 替换为你的实际data_list data_list = [{'姓名': '张三'}, {'年龄': 25}, {'职业': '程序员'}, {'城市': '北京'}] # 合并所有单键字典为一个完整字典 merged_dict = {k: v for d in data_list for k, v in d.items()} # 转成单行DataFrame df = pd.DataFrame([merged_dict]) # 写入Excel df.to_excel('HomeOwners_results.xlsx', index=False, header=True)
方法2:循环update合并(直观版,便于处理键重复场景)
import pandas as pd data_list = [{'姓名': '张三'}, {'年龄': 25}, {'职业': '程序员'}, {'城市': '北京'}] merged_dict = {} for d in data_list: # 若存在重复键,后面的字典值会覆盖前面的 merged_dict.update(d) df = pd.DataFrame([merged_dict]) df.to_excel('HomeOwners_results.xlsx', index=False, header=True)
以上两种方法都会生成符合预期的Excel文件:所有字典的键作为列名,对应值填充在同一行的对应列中。
内容的提问来源于stack exchange,提问作者Georgian Costea
相关产品推荐
相关产品推荐

