逐步将带有 json 的列表规范化为数据框
Normalize a list with jsons to a dataframe in steps
我有问题。我有一个 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'}]
最有可能出现的问题是,在第一次迭代时,空数据帧是 obtained.Since,使用了 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'中创建不必要的四个字典。
有必要在每次迭代时在循环中传递必要元素的列表,并从 them.The 中获取索引,第一次迭代是 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()
我有问题。我有一个 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'}]
最有可能出现的问题是,在第一次迭代时,空数据帧是 obtained.Since,使用了 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'中创建不必要的四个字典。 有必要在每次迭代时在循环中传递必要元素的列表,并从 them.The 中获取索引,第一次迭代是 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()