1 回答
![?](http://img1.sycdn.imooc.com/545865b000016a9202200220-100-100.jpg)
TA贡献1909条经验 获得超7个赞
使用Index.str.split
withexpand=True
创建MultiIndex
列,然后在字典理解中遍历level=0
列并使用DataFrame.to_dict
with orient=records
:
df.columns = df.columns.str.split('/', expand=True)
dct = {k: df[k].to_dict('r') for k in df.columns.levels[0]}
例子:
print(df)
user/username user/email user/name address/country address/city
0 A1 B1 C1 D1 E1
1 A2 B2 C2 D2 E2
print(dct)
{
'address': [
{'city': 'E1', 'country': 'D1'},
{'city': 'E2', 'country': 'D2'}
],
'user': [
{'email': 'B1', 'name': 'C1', 'username': 'A1'},
{'email': 'B2', 'name': 'C2', 'username': 'A2'}
]
}
编辑:如果数据框中的每一行需要嵌套字典,顶级键为user和address:
from collections import defaultdict
def f(df):
df = df.set_axis(
df.columns.str.split('/', expand=True), 1)
for d in df.to_dict('r'):
dct = defaultdict(dict)
for x, y in d:
dct[x][y] = d[(x, y)]
yield dict(dct)
dcts = list(f(df))
结果:
print(dcts)
[
{
'user': {'username': 'A1', 'email': 'B1', 'name': 'C1'},
'address': {'country': 'D1', 'city': 'E1'}
},
{
'user': {'username': 'A2', 'email': 'B2', 'name': 'C2'},
'address': {'country': 'D2', 'city': 'E2'}
}
]
添加回答
举报