从字典创建 Pandas DataFrame

Posted

技术标签:

【中文标题】从字典创建 Pandas DataFrame【英文标题】:Create Pandas DataFrame from dictionary 【发布时间】:2019-02-10 22:29:13 【问题描述】:

我试图将'a': [1, 2, 3], 'b': [4, 5] 的字典转换为:

 0           | 1           | 
|:-----------|------------:| 
| a          |        1    |  
| a          |        2    |   
| a          |        3    |     
| b          |        4    |    
| b          |        5    |     

但是在不修改字典本身的情况下,还没有找到任何方法来实现这一点。有没有更简单的方法来做到这一点?任何帮助将不胜感激!谢谢!

【问题讨论】:

【参考方案1】:

使用pd.DataFrame.from_dict

pd.DataFrame.from_dict(d,'index').stack().reset_index(level=0)
Out[194]: 
  level_0    0
0       a  1.0
1       a  2.0
2       a  3.0
0       b  4.0
1       b  5.0

【讨论】:

Noooo,stack 再次:( @jpp 我只是尝试使用 pandas 函数来回答这个问题,因为 pandas 库有 stack 。如果我们确实关心速度,我认为这里应该考虑 numba 和 cpython。 @Wen,别担心,我仍然认为这是一个很好的答案。但是简单是有代价的:(【参考方案2】:

您可以将dict扩展为元组列表,然后转换为df,如下所示;

ddd = 'a': [1, 2, 3], 'b': [4, 5]
df = pd.DataFrame([(k,v) for k in ddd for v in ddd[k]])

【讨论】:

【参考方案3】:

您可以使用numpy.concatenatenumpy.repeat

import numpy as np

d = 'a': [1, 2, 3], 'b': [4, 5]

values = np.concatenate(list(d.values()))
lens = list(map(len, d.values()))

res = pd.DataFrame(0: np.repeat(list(d), lens),
                    1: values)

结果

   0  1
0  a  1
1  a  2
2  a  3
3  b  4
4  b  5

这似乎比应有的困难,但请记住,您需要为每个系列/列创建数组。本质上,我们需要重复系列0的字典键和连接系列1的字典值。

【讨论】:

以上是关于从字典创建 Pandas DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

从字典列表创建 Pandas MultiIndex 的最佳方法是啥?

使用元组键从字典创建 MultiIndex pandas DataFrame

如何使用 Pandas 从 DataFrame 或 np.array 中的列条目创建字典

使用扩展[duplicate]从字典创建pandas数据帧

如何从Twitter Search API创建pandas数据框?

从熊猫数据框创建嵌套字典