【问题标题】:How to convert a pandas DataFrame into a dictionary of lists with to_dict()?如何使用 to_dict() 将 pandas DataFrame 转换为列表字典?
【发布时间】:2020-03-10 02:43:46
【问题描述】:

这似乎是一个简单的问题,但我对 pandas.DataFrame.to_dict 文档的复杂程度感到困惑:

我有以下玩具示例 pandas DataFrame 有两列,其中 column2 是一列列表:

import pandas as pd

dict1 = {'column1': ['list1', 'list2', 'list3'], 'column2': [[367, 30, 847, 482, 887, 654, 347, 504, 413, 821], [754, 915, 622, 149, 279, 192, 312, 203, 742, 846], [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]]}

df = pd.DataFrame(dict1)

print(df)
  column1                                            column2
0   list1  [367, 30, 847, 482, 887, 654, 347, 504, 413, 821]
1   list2  [754, 915, 622, 149, 279, 192, 312, 203, 742, 846]
2   list3  [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]

我想将此 pandas DataFrame 转换为字典,其中每个键来自 column1,值来自 column2

这是我的首选输出:

{'list1': [367, 30, 847, 482, 887, 654, 347, 504, 413, 821], 
'list2': [754, 915, 622, 149, 279, 192, 312, 203, 742, 846], 
'list3': [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]}

使用.to_dict(),这看起来很复杂。

如果我尝试df.set_index('column1').T.to_dict(),我会得到一个字典,其中包含字典中的列名:

{'list1': {'column2': [367, 30, 847, 482, 887, 654, 347, 504, 413, 821]}, 
'list2': {'column2': [754, 915, 622, 149, 279, 192, 312, 203, 742, 846]}, 
'list3': {'column2': [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]}}

如果我尝试使用to_dict("list"),我会得到以下信息:

{'list1': [[367, 30, 847, 482, 887, 654, 347, 504, 413, 821]], 
'list2': [[754, 915, 622, 149, 279, 192, 312, 203, 742, 846]], 
'list3': [[586, 521, 470, 476, 693, 426, 746, 733, 528, 565]]}

这是不正确的,因为现在是列表列表的值,而不是单个列表。

如果我尝试to_dict("records"),输出实际上是一个列表,而不是字典:

[{'list1': [367, 30, 847, 482, 887, 654, 347, 504, 413, 821], 
'list2': [754, 915, 622, 149, 279, 192, 312, 203, 742, 846], 
'list3': [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]}]

是否有另一个简单的命令可以将此 pandas DataFrame 转换为列表字典?我觉得我错过了什么。

【问题讨论】:

    标签: python pandas dataframe dictionary


    【解决方案1】:

    这是你想要的吗:

    df.set_index('column1')['column2'].to_dict()
    

    输出:

    {'list1': [367, 30, 847, 482, 887, 654, 347, 504, 413, 821],
     'list2': [754, 915, 622, 149, 279, 192, 312, 203, 742, 846],
     'list3': [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]}
    

    【讨论】:

    • 啊,这要简单得多。谢谢!
    【解决方案2】:

    你可以使用zip():

    >>> import pandas as pd
    >>>
    >>> dict1 = {'column1': ['list1', 'list2', 'list3'], 'column2': [[367, 30, 847, 482, 887, 654, 347, 504, 413, 821], [754, 915, 622, 149, 279, 192, 312, 203, 742, 846], [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]]}
    >>>
    >>> df = pd.DataFrame(dict1)
    >>>
    >>>
    >>> ur_dict = dict(zip(df['column1'], df['column2']))
    >>> ur_dict
    {'list1': [367, 30, 847, 482, 887, 654, 347, 504, 413, 821], 'list2': [754, 915, 622, 149, 279, 192, 312, 203, 742, 846], 'list3': [586, 521, 470, 476, 693, 426, 746, 733, 528, 565]}
    >>>
    

    【讨论】:

    • 谢谢,这很有道理!
    • 是的,当然:)))
    猜你喜欢
    • 2021-11-10
    • 2014-01-05
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多