如何用Python将Pandas DataFrame转换为嵌套字典列表?
Pandas DataFrame转嵌套字典列表的优雅实现
核心思路
利用Pandas内置的apply(按行生成嵌套字典)和to_dict('records')(将DataFrame转为字典列表)方法,避免手动遍历行,实现高效且简洁的格式转换。
示例实现
假设你的DataFrame结构如下:
import pandas as pd # 示例数据 df = pd.DataFrame({ 'Name': ['Alice', 'Bob'], 'Age': [30, 25], 'Street': ['123 Main St', '456 Oak Ave'], 'City': ['New York', 'Los Angeles'], 'Postcode': ['10001', '90001'] })
步骤1:生成嵌套的Address字段
通过assign方法新增Address列,将指定的地址列按行转为字典:
# 整合地址列为嵌套字典 df_processed = df.assign( Address=df[['Street', 'City', 'Postcode']].apply(dict, axis=1) ).drop(columns=['Street', 'City', 'Postcode']) # 删除原地址列
步骤2:转为目标字典列表
用to_dict('records')将处理后的DataFrame直接转为字典列表:
result = df_processed.to_dict('records')
最终输出的result格式如下:
[ {'Name': 'Alice', 'Age': 30, 'Address': {'Street': '123 Main St', 'City': 'New York', 'Postcode': '10001'}}, {'Name': 'Bob', 'Age': 25, 'Address': {'Street': '456 Oak Ave', 'City': 'Los Angeles', 'Postcode': '90001'}} ]
扩展:多组嵌套字段处理
如果需要生成多个嵌套字典(比如同时整合联系信息),只需重复assign逻辑即可:
# 带联系信息的示例数据 df = pd.DataFrame({ 'Name': ['Alice', 'Bob'], 'Age': [30, 25], 'Street': ['123 Main St', '456 Oak Ave'], 'City': ['New York', 'Los Angeles'], 'Postcode': ['10001', '90001'], 'Phone': ['555-1234', '555-5678'], 'Email': ['alice@example.com', 'bob@example.com'] }) # 生成多个嵌套字段 df_multi_nested = df.assign( Address=df[['Street', 'City', 'Postcode']].apply(dict, axis=1), Contact=df[['Phone', 'Email']].apply(dict, axis=1) ).drop(columns=['Street', 'City', 'Postcode', 'Phone', 'Email']) result_multi = df_multi_nested.to_dict('records')
为什么不用遍历行?
Pandas的内置方法基于向量化操作,底层用C实现,比Python层面的for循环遍历行效率高得多,尤其是处理大规模数据集时优势明显,同时代码更简洁易维护。
内容的提问来源于stack exchange,提问作者Empusas
相关产品推荐
相关产品推荐

