来自元组键和元组值的dict的Pandas Dataframe

k3fezbri  于 2023-03-06  发布在  其他
关注(0)|答案(3)|浏览(115)

我有一条Python的命令是这样的:

{(1,2):(3,4), (4,5):(5,9)}

如何将其转换为Pandas Dataframe,如:
| 键1|键2|值1|val 2值|
| - ------|- ------|- ------|- ------|
| 1个|第二章|三个|四个|
| 四个|五个|五个|九|

j9per5c4

j9per5c41#

使用DataFrame构造函数和MultiIndex的简单方法:

out = (
pd.DataFrame(d.values(), 
              index=pd.MultiIndex.from_tuples(d))
  .reset_index()
 )

输出:

level_0  level_1  0  1
0        1        2  3  4
1        4        5  5  9

如果要自动处理自定义名称:

def renamer(name):
    if str(name).startswith('level_'):
        return f'key{int(name[6:])+1}'
    else:
        return f'value{int(name)+1}'

out = (
pd.DataFrame(d.values(), 
              index=pd.MultiIndex.from_tuples(d))
  .reset_index()
  .rename(columns=renamer)
 )
  • 注意:这适用于任意数量的键/值。*

输出:

key1  key2  value1  value2
0     1     2       3       4
1     4     5       5       9
disho6za

disho6za2#

可能的解决方案:

df = pd.DataFrame.from_dict(d)
(df.swapaxes("index", "columns")
 .reset_index()
 .set_axis(['key1', 'key2', 'value1', 'value2'], axis=1))

或者,可替换地,

df = pd.DataFrame.from_dict(d)
pd.DataFrame(
    np.hstack([np.vstack(df.columns), df.values.T]), 
    columns=['key1', 'key2', 'value1', 'value2'])

输出:

key1  key2  value1  value2
0     1     2       3       4
1     4     5       5       9
qco9c6ql

qco9c6ql3#

您可以创建一个新的临时字典来拆分元组吗?

import pandas as pd 
dict_1 = {(1,2):(3,4), (4,5):(5,9)}
dict_2 = {x: [] for x in ['key1', 'key2', 'val1', 'val2']}
for key, val in dict_1.items():
    dict_2['key1'].append(key[0])
    dict_2['key2'].append(key[1])
    dict_2['val1'].append(val[0])
    dict_2['val2'].append(val[1])
    
df = pd.DataFrame(dict_2)
print(df)

相关问题