将字典保存到 Pandas 数据框,键作为列并合并索引
Save dictionary to Pandas dataframe with keys as columns and merge indices
我知道已经有很多关于如何将 pandas 字典转换为数据框的帖子,但是我找不到讨论我遇到的问题的帖子。
我的词典如下所示:
[Out 23]:
{'atmosphere': 0
2 5
9 4
15 1
26 5
29 5
... ..
2621 4
6419 3
[6934 rows x 1 columns],
'communication': 0
13 1
15 1
26 1
2621 2
3119 5
... ..
6419 4
6532 1
[714 rows x 1 columns]
现在,我想要的是从这个字典中创建一个数据框,其中 'atmosphere' 和 'communication' 是列,并且合并两个项目的索引,以便数据框看起来如下:
index atmosphere commmunication
2 5
9 4
13 1
15 1 1
26 5 1
29 5
2621 4 2
3119 5
6419 3 4
6532 1
我已经尝试过 pd.DataFrame.from_dict,但它会将所有值保存在一行中。
非常感谢任何帮助!
使用 concat
with DataFrame.droplevel
从 MultiIndex in columns
中移除二级 0
:
d = {'atmosphere':pd.DataFrame({0: {2: 5, 9: 4, 15: 1, 26: 5, 29: 5,
2621: 4, 6419: 3}}),
'communication':pd.DataFrame({0: {13: 1, 15: 1, 26: 1, 2621: 2,
3119: 5, 6419: 4, 6532: 1}})}
print (d['atmosphere'])
0
2 5
9 4
15 1
26 5
29 5
2621 4
6419 3
print (d['communication'])
0
13 1
15 1
26 1
2621 2
3119 5
6419 4
6532 1
df = pd.concat(d, axis=1).droplevel(1, axis=1)
print (df)
atmosphere communication
2 5.0 NaN
9 4.0 NaN
13 NaN 1.0
15 1.0 1.0
26 5.0 1.0
29 5.0 NaN
2621 4.0 2.0
3119 NaN 5.0
6419 3.0 4.0
6532 NaN 1.0
备选方案:
df = pd.concat({k: v[0] for k, v in d.items()}, axis=1)
您可以将 pandas.concat
on the values and set_axis
与字典键一起使用:
out = pd.concat(d.values(), axis=1).set_axis(d, axis=1)
输出:
atmosphere communication
2 5.0 NaN
9 4.0 NaN
13 NaN 1.0
15 1.0 1.0
26 5.0 1.0
29 5.0 NaN
2621 4.0 2.0
3119 NaN 5.0
6419 3.0 4.0
6532 NaN 1.0
我知道已经有很多关于如何将 pandas 字典转换为数据框的帖子,但是我找不到讨论我遇到的问题的帖子。 我的词典如下所示:
[Out 23]:
{'atmosphere': 0
2 5
9 4
15 1
26 5
29 5
... ..
2621 4
6419 3
[6934 rows x 1 columns],
'communication': 0
13 1
15 1
26 1
2621 2
3119 5
... ..
6419 4
6532 1
[714 rows x 1 columns]
现在,我想要的是从这个字典中创建一个数据框,其中 'atmosphere' 和 'communication' 是列,并且合并两个项目的索引,以便数据框看起来如下:
index atmosphere commmunication
2 5
9 4
13 1
15 1 1
26 5 1
29 5
2621 4 2
3119 5
6419 3 4
6532 1
我已经尝试过 pd.DataFrame.from_dict,但它会将所有值保存在一行中。 非常感谢任何帮助!
使用 concat
with DataFrame.droplevel
从 MultiIndex in columns
中移除二级 0
:
d = {'atmosphere':pd.DataFrame({0: {2: 5, 9: 4, 15: 1, 26: 5, 29: 5,
2621: 4, 6419: 3}}),
'communication':pd.DataFrame({0: {13: 1, 15: 1, 26: 1, 2621: 2,
3119: 5, 6419: 4, 6532: 1}})}
print (d['atmosphere'])
0
2 5
9 4
15 1
26 5
29 5
2621 4
6419 3
print (d['communication'])
0
13 1
15 1
26 1
2621 2
3119 5
6419 4
6532 1
df = pd.concat(d, axis=1).droplevel(1, axis=1)
print (df)
atmosphere communication
2 5.0 NaN
9 4.0 NaN
13 NaN 1.0
15 1.0 1.0
26 5.0 1.0
29 5.0 NaN
2621 4.0 2.0
3119 NaN 5.0
6419 3.0 4.0
6532 NaN 1.0
备选方案:
df = pd.concat({k: v[0] for k, v in d.items()}, axis=1)
您可以将 pandas.concat
on the values and set_axis
与字典键一起使用:
out = pd.concat(d.values(), axis=1).set_axis(d, axis=1)
输出:
atmosphere communication
2 5.0 NaN
9 4.0 NaN
13 NaN 1.0
15 1.0 1.0
26 5.0 1.0
29 5.0 NaN
2621 4.0 2.0
3119 NaN 5.0
6419 3.0 4.0
6532 NaN 1.0