pandas 中 to_dict 的用法

本文详细介绍了 Pandas 中 DataFrame 对象的 to_dict 方法的使用,包括其语法、参数及返回值类型。通过多个实例展示了如何将 DataFrame 转换为不同的字典格式,如字典的字典、列表、Series、拆分格式、记录列表和索引字典。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【时间】2019.11.16

【题目】pandas 中 to_dict 的用法

 转自:pandas 中 to_dict 的用法

一、语法

DataFrame.to_dict(orient='dict', into=<class 'dict'>)
参数:

orient : str {‘dict’, ‘list’, ‘series’, ‘split’, ‘records’, ‘index’}

 

  • ‘dict’ (default) : {column -> {index -> value}}
  • ‘list’ :  {column -> [values]}
  • ‘series’ : {column -> Series(values)}
  • ‘split’ : {‘index’ -> [index], ‘columns’ -> [columns], ‘data’ -> [values]}
  • ‘records’ : [{column -> value}, … , {column -> value}]
  • ‘index’ : {index -> {column -> value}}

也可以用缩写表示,  s 代表 series ,sp 代表 split.

into : class, 默认dict

Returns:

dict, list 或 collections.Mapping

 

二、例子

1、orient默认为dict,返回每一列数据,字典的字典。

>>> df = pd.DataFrame({'col1': [1, 2],
...                    'col2': [0.5, 0.75]},
...                   index=['row1', 'row2'])
>>> df
      col1  col2
row1     1  0.50
row2     2  0.75
>>> df.to_dict()
{'col1': {'row1': 1, 'row2': 2}, 'col2': {'row1': 0.5, 'row2': 0.75}}

2、orient='series',返回每一列数据(<class 'pandas.core.series.Series'>),字典表示。

>>> df.to_dict('series')
{'col1': row1    1
         row2    2
Name: col1, dtype: int64,
'col2': row1    0.50
        row2    0.75
Name: col2, dtype: float64}

3、orient='split':列名称(columns)、行名称(index)、data分离

>>> df.to_dict('split')
{'index': ['row1', 'row2'], 'columns': ['col1', 'col2'],
 'data': [[1, 0.5], [2, 0.75]]}

4、orient='record':返回每一行数据(记录)的列表

>>> df.to_dict('records')
[{'col1': 1, 'col2': 0.5}, {'col1': 2, 'col2': 0.75}]

5、orient='series':在orient='record'基础上加上行index,返回每一行数据(记录)的字典

>>> df.to_dict('index')
{'row1': {'col1': 1, 'col2': 0.5}, 'row2': {'col1': 2, 'col2': 0.75}}

6、OrderedDict, defaultdict

>>> from collections import OrderedDict, defaultdict
>>> df.to_dict(into=OrderedDict)
OrderedDict([('col1', OrderedDict([('row1', 1), ('row2', 2)])),
             ('col2', OrderedDict([('row1', 0.5), ('row2', 0.75)]))])

If you want a defaultdict, you need to initialize it:

>>> dd = defaultdict(list)
>>> df.to_dict('records', into=dd)
[defaultdict(<class 'list'>, {'col1': 1, 'col2': 0.5}),
 defaultdict(<class 'list'>, {'col1': 2, 'col2': 0.75})]

 

### Pandas `to_dict` 方法使用方法 Pandas 提供了 `.to_dict()` 方法,该方法能够将 DataFrame 转换为字典格式的数据。此方法的关键在于其参数 **`orient`**,它决定了最终生成的字典结构。 #### 参数说明 `.to_dict()` 的主要参数是 `orient`,它可以接受以下几种取值: - `'dict'`: 默认选项,返回 `{column -> {index -> value}}` 形式的嵌套字典[^1]。 - `'list'`: 返回 `{column -> [values]}` 形式的字典,其中每个列对应一个包含所有行值的列表[^2]。 - `'series'`: 返回 `{column -> Series}` 形式的字典,Series 是 Pandas 中的一种数据结构。 - `'split'`: 返回一个具有键 `'index'`, `'columns'`, 和 `'data'` 的字典,分别表示索引、列名和数据。 - `'records'`: 返回 `[{'column': value}, ... ]` 形式的记录列表,每条记录代表一行数据。 - `'index'`: 返回 `{index -> {column -> value}}` 形式的字典,适合按索引访问数据。 以下是具体的代码示例来展示这些参数的作用。 --- ### 示例代码 假设我们有一个简单的 DataFrame 如下所示: ```python import pandas as pd df = pd.DataFrame({ 'A': ['foo', 'bar'], 'B': [1, 2], 'C': [3.14, 2.71] }) ``` #### 使用默认参数 (`'dict'`) 这是最常用的模式之一,适用于需要逐行列出数据的情况。 ```python result = df.to_dict() print(result) ``` 输出结果如下: ```plaintext {'A': {0: 'foo', 1: 'bar'}, 'B': {0: 1, 1: 2}, 'C': {0: 3.14, 1: 2.71}} ``` 这里的结果是以列为单位构建的一个嵌套字典。 #### 使用 `'list'` 参数 当希望每一列都作为一个独立的列表时,可以选择这种模式。 ```python result = df.to_dict(orient='list') print(result) ``` 输出结果如下: ```plaintext {'A': ['foo', 'bar'], 'B': [1, 2], 'C': [3.14, 2.71]} ``` 这种方式非常适合后续处理成 JSON 或其他序列化格式。 #### 使用 `'records'` 参数 如果目标是获取一系列字典对象(即每行为一条记录),则可以采用此方式。 ```python result = df.to_dict(orient='records') print(result) ``` 输出结果如下: ```plaintext [{'A': 'foo', 'B': 1, 'C': 3.14}, {'A': 'bar', 'B': 2, 'C': 2.71}] ``` 这通常用于导出到数据或其他外部存储系统。 #### 使用 `'split'` 参数 对于需要分离索引、列名和实际数据的应用场景,可选用此模式。 ```python result = df.to_dict(orient='split') print(result) ``` 输出结果如下: ```plaintext { 'index': [0, 1], 'columns': ['A', 'B', 'C'], 'data': [['foo', 1, 3.14], ['bar', 2, 2.71]] } ``` 注意这里的 `'data'` 键包含了所有的数值矩阵。 #### 使用 `'index'` 参数 若需按照索引来组织数据,则应选择这一设置。 ```python result = df.to_dict(orient='index') print(result) ``` 输出结果如下: ```plaintext {0: {'A': 'foo', 'B': 1, 'C': 3.14}, 1: {'A': 'bar', 'B': 2, 'C': 2.71}} ``` 这种方式特别适合作为某些 API 输入的一部分。 --- ### 总结 通过调整 `orient` 参数,用户可以根据具体需求灵活地控制转换后的字典结构。无论是为了进一步分析还是与其他工具集成,这种方法都非常实用。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值