我有几个字典设置如下:
Dict1 = {'Orange': ['1', '2', '3', '4']}
Dict2 = {'Red': ['3', '4', '5']}
| Type | Value |
|--------------|
|Orange| 1 |
|Orange| 2 |
|Orange| 3 |
|Orange| 4 |
| Red | 3 |
| Red | 4 |
| Red | 5 |
我尝试将所有内容拆分,但我只在此数据帧中获得Dict2.
mydicts = [Dict1, Dict2]
for x in mydicts:
for k, v in x.items():
df = pd.DataFrame(v)
df['Type'] = k
解决方法:
一种选择是使用pd.concat:
pd.concat(map(pd.DataFrame, mydicts), axis=1).melt().dropna()
variable value
0 Orange 1
1 Orange 2
2 Orange 3
3 Orange 4
4 Red 3
5 Red 4
6 Red 5
如果性能很重要,您可以使用DataFrame.from_dict初始化单个DataFrame并融化:
pd.DataFrame.from_dict({**Dict1, **Dict2}, orient='index').T.melt().dropna()
variable value
0 Orange 1
1 Orange 2
2 Orange 3
3 Orange 4
4 Red 3
5 Red 4
6 Red 5
或者,使用堆栈而不是熔化(稍慢,仅为了完整性):
res = (pd.DataFrame.from_dict({**Dict1, **Dict2}, orient='index').T
.stack()
.reset_index(level=1)
.sort_values('level_1'))
res.columns = ['Type', 'Value']
print(res)
Type Value
0 Orange 1
1 Orange 2
2 Orange 3
3 Orange 4
0 Red 3
1 Red 4
2 Red 5
字典解包语法适用于python3.6.在较旧的版本中,将{** d1,** d2}替换为{k:v代表d的mydicts中的d,代替d.items()}中的v.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。