我有這個 JSON:
{'57333310':
{'3179138607':
{'clicks': 0,
'spent': 0,
'cpc': 0,
'qualityFactor': 1.5},
'0':
{'clicks': 0,
'spent': 0,
'cpc': 0,
'qualityFactor': 1.5}},
'57335920':
{'4001223651':
{'clicks': 0,
'spent': 0,
'cpc': 0,
'qualityFactor': 1.5},
'896887695':
{'clicks': 0,
'spent': 0,
'cpc': 0,
'qualityFactor': 1.5},
'0':
{'clicks': 0,
'spent': 0,
'cpc': 0,
'qualityFactor': 1.5}}}
而且我測驗的任何方法(不包括迭代字典的嵌套回圈)都沒有回傳這樣的表:
key_1 key_2 clicks spent cpc qualityFactor
0 57333310 3179138607 0 0.0 0.00 1.5
1 57333310 0 0 0.0 0.00 1.5
2 57335920 4001223651 0 0.0 0.00 1.5
3 57335920 896887695 0 0.0 0.00 1.5
4 57335920 0 0 0.0 0.00 1.5
我試過這個代碼:
# d is JSON dictionary
df = pd.DataFrame()
for key_1 in d.keys():
for key_2 in d[key_1].keys():
df = df.append(pd.DataFrame.from_dict(d[key_1][key_2], orient = 'index').T.join(
pd.DataFrame({'key_1':[key_1], 'key_2':[key_2]})), ignore_index = True)
df
回報
clicks spent cpc qualityFactor key_1 key_2
0 0.0 0.0 0.0 1.5 57333310 3179138607
1 0.0 0.0 0.0 1.5 57333310 0
2 0.0 0.0 0.0 1.5 57335920 4001223651
3 0.0 0.0 0.0 1.5 57335920 896887695
4 0.0 0.0 0.0 1.5 57335920 0
和這個:
for key_1 in d.keys():
for key_2 in d[key_1].keys():
d[key_1][key_2].update({'key_1': key_1})
d[key_1][key_2].update({'key_2': key_2})
r = []
for l in list([list(x.values()) for x in list(d.values())]):
r = l
df = pd.DataFrame(r)[['key_1','key_2','clicks','spent','cpc','qualityFactor']]
df
回報
key_1 key_2 clicks spent cpc qualityFactor
0 57333310 3179138607 0 0 0 1.5
1 57333310 0 0 0 0 1.5
2 57335920 4001223651 0 0 0 1.5
3 57335920 896887695 0 0 0 1.5
4 57335920 0 0 0 0 1.5
兩種方式都可以,但是第一次代碼不應該有嵌套回圈,第二次嵌套的每一級都必須用一個新的嵌套回圈來處理,這使得代碼對于任何嵌套都不是通用的,因為新的回圈需要用手額外完成。
任務是在不使用回圈(至少是嵌套回圈)的情況下獲得這樣的資料幀。有沒有人有解決方案?
uj5u.com熱心網友回復:
使用帶有轉換鍵的串列理解到輔助字典,最后一次傳遞給DataFrame建構式是最快的解決方案,尤其是在許多嵌套字典的情況下:
L = [{**{'key_1':k1, 'key_2':k2}, **v2} for k1, v1 in d.items() for k2, v2 in v1.items()]
df = pd.DataFrame(L)
print (df)
key_1 key_2 clicks spent cpc qualityFactor
0 57333310 3179138607 0 0 0 1.5
1 57333310 0 0 0 0 1.5
2 57335920 4001223651 0 0 0 1.5
3 57335920 896887695 0 0 0 1.5
4 57335920 0 0 0 0 1.5
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/365718.html
