从字典创建 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.concatenate
和numpy.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 中的列条目创建字典