我有一列“数据”,其中有json对象作为值。我想在嵌套的json
中添加键/值对source = {'my_dict':[{'_id': 'SE-DATA-BB3A'},{'_id': 'SE-DATA-BB3E'},{'_id': 'SE-DATA-BB3F'}], 'data': [ {'bb3a_bmls':[{'name': 'WAG 01', 'id': '105F', 'state': 'available', 'nodes': 3,'volumes-': [{'state': 'available', 'id': '330172', 'name': 'q_-4144d4e'}, {'state': 'available', 'id': '275192', 'name': 'p_3089d821ae', }]}]}
, {'bb3b_bmls':[{'name': 'FEC 01', 'id': '382E', 'state': 'available', 'nodes': 4,'volumes': [{'state': 'unavailable', 'id': '830172', 'name': 'w_-4144d4e'}, {'state': 'unavailable', 'id': '223192', 'name': 'g_3089d821ae', }]}]}
, {'bb3c_bmls':[{'name': 'ASD 01', 'id': '303F', 'state': 'available', 'nodes': 6,'volumes': [{'state': 'unavailable', 'id': '930172', 'name': 'e_-4144d4e'}, {'state': 'unavailable', 'id': '245192', 'name': 'h_3089d821ae', }]}]}
] }
input_df = pd.DataFrame(source)
现在我需要将“ my_dict”列值添加为“数据”列的嵌套json值内的第一个元素
我厌倦了使用dict.update(),但似乎无济于事。我被困在这里,却不知道如何继续前进。感谢您的帮助。
答案 0 :(得分:2)
解决方案如下:
def update_data(row):
data_dict = row['data']
for key in data_dict:
data_dict.update(row.loc['my_dict'])
return data_dict
df['data'] = df.apply(update_data,axis=1)
答案 1 :(得分:1)
def get_val(row):
my_dict_val = row.loc['my_dict']
dict_key = list(row['data'].keys())[0]
if not list(row['data'].values())[0]:
return row['data']
data_dict = list(row['data'].values())[0][0]
data_dict.update(my_dict_val)
res = dict()
res[dict_key] = []
res[dict_key].append(data_dict)
return res
input_df['data'] = input_df.apply(get_val, axis=1)
答案 2 :(得分:1)
我认为将其作为数据框没有任何好处,如果您保留原始字典,那么下面的循环就可以了,
my_dict=[{'_id': 'SE-DATA-BB3A'},{'_id': 'SE-DATA-BB3E'},{'_id': 'SE-DATA-BB3F'}]
data = [ {'bb3a_bmls':[{'name': 'WAG 01', 'id': '105F', 'state': 'available', 'nodes': 3,'volumes-': [{'state': 'available', 'id': '330172', 'name': 'q_-4144d4e'}, {'state': 'available', 'id': '275192', 'name': 'p_3089d821ae', }]}]}
, {'bb3b_bmls':[{'name': 'FEC 01', 'id': '382E', 'state': 'available', 'nodes': 4,'volumes': [{'state': 'unavailable', 'id': '830172', 'name': 'w_-4144d4e'}, {'state': 'unavailable', 'id': '223192', 'name': 'g_3089d821ae', }]}]}
, {'bb3c_bmls':[{'name': 'ASD 01', 'id': '303F', 'state': 'available', 'nodes': 6,'volumes': [{'state': 'unavailable', 'id': '930172', 'name': 'e_-4144d4e'}, {'state': 'unavailable', 'id': '245192', 'name': 'h_3089d821ae', }]}]}
]
for idx, val in enumerate(data):
val[list(val.keys())[0]][0].update(my_dict[idx])