pandas中dict和dataFrame互转

本文介绍如何使用Python的Pandas库实现字典(dict)与DataFrame之间的转换。包括从字典创建DataFrame的方法,以及DataFrame转换成不同形式字典的具体操作。
部署运行你感兴趣的模型镜像

一、dict转Dataframe

pd.DataFrame(dict_a)

二、df转dict

使用df.to_dict()默认会把key和值分开
参数:'dict' (默认) ,'list','series','split','records','index'

如果是list(dict)这种嵌套情况转的df,回转需要使用records

# 拿上面的数据举例,df_b
     a    b    c
0    0    1    2
1    3    4    5
2    6    7    8


# 1、不传入参数,默认是'dict'
df_b.to_dict()  # 列标题作为外层dict键值,索引作为内层dict键值
>> 
{'a': {0: 0, 1: 3, 2: 6}, 'b': {0: 1, 1: 4, 2: 7}, 'c': {0: 2, 1: 5, 2: 8}}


# 2、'list'
df_b.to_dict('list')  # 列标题是外层键值,内层是list
>>
{'a': [0, 3, 6], 'b': [1, 4, 7], 'c': [2, 5, 8]}

# 3、'split'
df_b.to_dict('split')  # 将列标题,索引,数据分开
>>
{'index': [0, 1, 2],
 'columns': ['a', 'b', 'c'],
 'data': [[0, 1, 2], [3, 4, 5], [6, 7, 8]]}


# 4、'records'
df_b.to_dict('records')  # 外层列表,内层是列标题为键值的列表
>>
[{'a': 0, 'b': 1, 'c': 2}, {'a': 3, 'b': 4, 'c': 5}, {'a': 6, 'b': 7, 'c': 8}]


# 5、'index'
df_b.to_dict('index')  # 与参数1相反:索引作为外层dict键值,列标题作为内层dict键值
>>
{0: {'a': 0, 'b': 1, 'c': 2}, 1: {'a': 3, 'b': 4, 'c': 5}, 2: {'a': 6, 'b': 7, 'c': 8}}

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

Python 中使用 `pandas`,可以非常方便地将字典(`dict`)换为 `DataFrame`。根据字典的结构不同,换方式略有差异。下面给出几种常见情况的完整示例解释。 --- ### ✅ 1. 基本用法:字典键为列名,值为列表(最常见) ```python import pandas as pd # 字典:key 是列名,value 是数据列表 data = { 'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35], 'city': ['New York', 'Paris', 'Tokyo'] } # 换为 DataFrame df = pd.DataFrame(data) print(df) ``` #### 输出: ``` name age city 0 Alice 25 New York 1 Bob 30 Paris 2 Charlie 35 Tokyo ``` > ✅ 这是最标准的方式,每个键对应一列,列表长度必须相同。 --- ### ✅ 2. 字典值不是列表(标量)——需指定 index 或使用 from_dict 如果字典中的值是单个值(非列表),直接会报错: ```python data_scalar = { 'name': 'Alice', 'age': 25, 'city': 'New York' } # 方法一:包装成列表 df = pd.DataFrame([data_scalar]) # 注意中括号 print(df) ``` #### 输出: ``` name age city 0 Alice 25 New York ``` > 使用 `[data_scalar]` 将字典变成一个包含一行的列表。 --- ### ✅ 3. 字典以行为单位(嵌套字典)——使用 `pd.DataFrame.from_dict()` 有时你有一个按“行”组织的字典: ```python data_by_row = { 0: {'name': 'Alice', 'age': 25, 'city': 'New York'}, 1: {'name': 'Bob', 'age': 30, 'city': 'Paris'}, 2: {'name': 'Charlie', 'age': 35, 'city': 'Tokyo'} } # 指定 orient='index' 表示字典的键是索引 df = pd.DataFrame.from_dict(data_by_row, orient='index') print(df) ``` #### 输出: ``` name age city 0 Alice 25 New York 1 Bob 30 Paris 2 Charlie 35 Tokyo ``` - `orient='index'`:表示字典的外层键是行索引。 - 默认 `orient='columns'`,即列优先。 --- ### ✅ 4. 输出 DataFrame 到控制台或文件 除了打印,你还可以输出到各种格式: ```python # 打印 print(df) # 输出为 CSV 文件 df.to_csv('output.csv', index=False) # 输出为 JSON print(df.to_json(orient='records', indent=2)) # 输出为 Excel(需要 openpyxl) df.to_excel('output.xlsx', index=False) ``` --- ### ⚠️ 注意事项: - 所有列的列表长度必须一致,否则会报错:`ValueError: arrays must all be same length`。 - 如果数据不规则,考虑先补全或使用 `pd.json_normalize()` 处理嵌套结构。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值