我有個問題。我有一個list. JSONs我想逐步創建一個完整的資料框。例如,我的想法是:我的串列包含 100 個元素。我想說臺階的大小應該是25。所以我說len(list) / size = 4 = 100 / 25。我有 4 次 for 回圈運行和 4 次將小資料幀連接到完整。對于 MVP,我構建了一個串列,其中包含 4 個元素,步長為 2。因此,每個回圈都應該聯系兩個元素。
最后我dataframe_complete只包含兩行。這有什么問題?
第一個回圈應該包含my_Dict和my_Dict2第二個my_Dict2和my_Dict2。所以串列應該從 0-1 和 2-3 開始。所以每個回圈運行都應該包含兩個元素。
import pandas as pd
my_Dict = {
'_key': '1',
'group': 'test',
'data': {},
'type': '',
'code': '007',
'conType': '1',
'flag': None,
'createdAt': '2021',
'currency': 'EUR',
'detail': {
'selector': {
'number': '12312',
'isTrue': True,
'requirements': [{
'type': 'customer',
'requirement': '1'}]
}
}
}
my_Dict2 = {
'_key': '2',
'group': 'test',
'data2': {},
'type': '',
'code': '007',
'conType': '1',
'flag': None,
'createdAt': '2021',
'currency': 'EUR',
'detail2': {
'selector': {
'number': '12312',
'isTrue': True,
'requirements': [{
'type': 'customer',
'requirement': '1'}]
}
}
}
list_dictionaries = [my_Dict, my_Dict2, my_Dict2, my_Dict2]
df_complete = pd.DataFrame()
size= 1
for i in range((len(list_dictionaries) // size)):
print(i)
df = pd.json_normalize(list_dictionaries[i], sep='_')
df_complete= pd.concat([df_complete, df])
print(df_complete)
[OUT]
_key group type code conType flag createdAt currency detail_selector_number detail_selector_isTrue detail_selector_requirements detail2_selector_number detail2_selector_isTrue detail2_selector_requirements
0 1 test 007 1 None 2021 EUR 12312 True [{'type': 'customer', 'requirement': '1'}] NaN NaN NaN
0 2 test 007 1 None 2021 EUR NaN NaN NaN 12312 True [{'type': 'customer', 'requirement': '1'}]
預期產出
_key group type code conType flag createdAt currency detail_selector_number detail_selector_isTrue detail_selector_requirements detail2_selector_number detail2_selector_isTrue detail2_selector_requirements
0 1 test 007 1 None 2021 EUR 12312 True [{'type': 'customer', 'requirement': '1'}] NaN NaN NaN
1 2 test 007 1 None 2021 EUR NaN NaN NaN 12312 True [{'type': 'customer', 'requirement': '1'}]
2 2 test 007 1 None 2021 EUR NaN NaN NaN 12312 True [{'type': 'customer', 'requirement': '1'}]
3 2 test 007 1 None 2021 EUR NaN NaN NaN 12312 True [{'type': 'customer', 'requirement': '1'}]
uj5u.com熱心網友回復:
最有可能出現的問題是在第一次迭代時獲得了一個空資料幀。因為使用了 list_dictionaries[:0] 切片。試試下面的代碼。
list_dictionaries = [my_Dict, my_Dict2, my_Dict2, my_Dict2]
df_complete = pd.DataFrame()
for i in range(0, len(list_dictionaries)):
df = pd.json_normalize(list_dictionaries[i], sep='_')
df_complete = pd.concat([df_complete, df])
print(df_complete.reset_index())
那是你需要的嗎?
如果每次迭代都需要兩個字典:
for i in range(0, len(list_dictionaries), 2):
print(list_dictionaries[i:i 2])
如果要在兩次迭代中連接所有標準化幀。
for i in range(0, len(list_dictionaries), 2):
df1 = pd.json_normalize(list_dictionaries[i], sep='_')
df2 = pd.json_normalize(list_dictionaries[i 1], sep='_')
df_complete = pd.concat([df_complete, df1, df2])
df_complete = df_complete.reset_index()
print(df_complete)
或者一般來說,以免在'list_dictionaries'中創建不必要的四個字典。有必要在每次迭代時在回圈中傳遞必要元素的串列并從中獲取索引。第一次迭代是 first 和 second[0, 1] 字典,第二次是 second[1, 1] 字典。
list_dictionaries = [my_Dict, my_Dict2]
df_complete = pd.DataFrame()
for i in [[0, 1], [1, 1]]:
df1 = pd.json_normalize(list_dictionaries[i[0]], sep='_')
df2 = pd.json_normalize(list_dictionaries[i[1]], sep='_')
df_complete = pd.concat([df_complete, df1, df2])
df_complete = df_complete.reset_index()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/473820.html
