Python 如何将数组字典的数组转换为数据帧?
我有一个嵌套字典数组: 数据={“A”:“A”,“B”:“B”,“ID”:[{“ii”:“ABC”,“jj”:“BCD”},{“ii”:“AAC”,“jj”:“FFD”}],“Finish”:“yes”} 我曾经Python 如何将数组字典的数组转换为数据帧?,python,list,dictionary,Python,List,Dictionary,我有一个嵌套字典数组: 数据={“A”:“A”,“B”:“B”,“ID”:[{“ii”:“ABC”,“jj”:“BCD”},{“ii”:“AAC”,“jj”:“FFD”}],“Finish”:“yes”} 我曾经 res = pd.DataFrame.from_dict(data , orient='index') 但是ID仍然作为字典列表返回 A B ID Finish a b [{&q
res = pd.DataFrame.from_dict(data , orient='index')
但是ID仍然作为字典列表返回
A B ID Finish
a b [{"ii":"ABC","jj":"BCD"},{"aa":"AAC","bb":"FFD"}] yes
但是我想把所有的东西都转换成df。不知道怎么做。请帮忙
预期产出:
A B ID.ii ID.jj Finish
a b ABC BCD yes
a b AAC FFD yes
您可以使用pandas
json\u normalize
df = pd.json_normalize(data, meta=['A', 'B'], record_path=['ID'], record_prefix="ID.")
输出
ID.ii ID.jj A B
0 ABC BCD a b
1 AAC FFD a b
记录路径-将用于展平特定键
记录前缀-作为列前缀添加
meta-是需要在不展平的情况下保留的列
参考示例要实现这一点,无需使用
json\u normalize
,您可以像这样预处理输入-
data = {"A":"a","B":"b","ID":[{"ii":"ABC","jj":"BCD"},{"ii":"AAC","jj":"FFD"}],"Finish":"yes"}
op = {}
for i in data:
if isinstance(data[i], list):
for j in data[i]:
for k in j:
tmp = str(i)+"."+str(k)
if tmp not in op:
op[tmp] = [j[k]]
else:
op[tmp].append(j[k])
else:
op[i] = data[i]
>>> data
{'A': 'a', 'B': 'b', 'ID': [{'ii': 'ABC', 'jj': 'BCD'}, {'ii': 'AAC', 'jj': 'FFD'}], 'Finish': 'yes'}
>>> op
{'A': 'a', 'B': 'b', 'ID.ii': ['ABC', 'AAC'], 'ID.jj': ['BCD', 'FFD'], 'Finish': 'yes'}
之后你可以直接使用
>>> pd.DataFrame(op)
A B ID.ii ID.jj Finish
0 a b ABC BCD yes
1 a b AAC FFD yes
你确定它不应该是-data={“A”:“A”,“B”:“B”,“ID”:[{“ii”:“ABC”,“jj”:“BCD”},{“ii”:“AAC”,“jj”:“FFD”}],“Finish”:“yes”}?进行了更改,谢谢。我在脚本中在哪里定义op?哦,对不起,我忘了添加它。(正在使用终端);)。编辑完毕,谢谢:)