AGH*_*ORN 3 python dictionary dataframe pandas
我有几个字典设置如下:
Dict1 = {'Orange': ['1', '2', '3', '4']}
Dict2 = {'Red': ['3', '4', '5']}
Run Code Online (Sandbox Code Playgroud)
我希望输出是一个组合数据帧:
| Type | Value |
|--------------|
|Orange| 1 |
|Orange| 2 |
|Orange| 3 |
|Orange| 4 |
| Red | 3 |
| Red | 4 |
| Red | 5 |
Run Code Online (Sandbox Code Playgroud)
我尝试将所有内容拆分,但我只在此数据帧中获得Dict2.
mydicts = [Dict1, Dict2]
for x in mydicts:
for k, v in x.items():
df = pd.DataFrame(v)
df['Type'] = k
Run Code Online (Sandbox Code Playgroud)
一种选择是使用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
Run Code Online (Sandbox Code Playgroud)
如果性能很重要,您可以使用DataFrame.from_dict和初始化单个DataFrame melt:
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
Run Code Online (Sandbox Code Playgroud)
或者,使用stack而不是melt(稍慢,只是为了完整性):
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
Run Code Online (Sandbox Code Playgroud)
字典解包语法适用于python3.6.在旧版本上,替换{**d1, **d2}为{k: v for d in mydicts for k, v in d.items()}.
| 归档时间: |
|
| 查看次数: |
289 次 |
| 最近记录: |