Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将列值添加到另一列';使用python的字典,pandas_Python_Json_Python 3.x_Pandas - Fatal编程技术网

如何将列值添加到另一列';使用python的字典,pandas

如何将列值添加到另一列';使用python的字典,pandas,python,json,python-3.x,pandas,Python,Json,Python 3.x,Pandas,我有一个列“data”,它的值是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':

我有一个列“data”,它的值是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)
输入_df如下所示:

现在我需要添加“my_dict”列值,作为“data”列的嵌套json值中的第一个元素

我的目标数据框应该如下所示(我已经用粗体突出显示了更改)


我厌倦了使用dict.update(),但似乎没有任何帮助。我被困在这里,不知道如何继续前进。感谢您的帮助。

我不认为将其作为数据帧有任何好处,如果您保留原始字典,那么下面的循环就可以了

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)
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])

我不认为将其作为数据帧有任何好处,如果您保留原始字典,那么下面的循环就可以了

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])

解决办法如下:

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) 

解决办法如下:

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) 

谢谢你的回复。实际上,我需要字典中列表[]中的值Tanks Djaballah!它适用于此示例数据。但是,如果我在大数据上应用它,我会得到一个错误——“IndexError:列表索引超出范围”。因为,其中一个数据值是{'bb3b_pasf':[]}。我想添加一个条件来检查data dictionary的值是否为空,以便该函数可以应用于具有值的字典。我做了一个检查,您可以尝试一下。现在我遇到了以下错误:(文件“”,第13行,在get_val data_dict=list(行['data'].values())[0][0]键错误:(0,'发生在索引3')感谢您的回复。实际上,我需要dictionaryThanks Djaballah中列表[]中的值!它适用于此示例数据。但是,如果我将其应用于大型数据,我会收到一个错误-“IndexError:列表索引超出范围”。因为,其中一个数据值是{bb3b_pasf':[]。我想添加一个条件来检查data dictionary的值是否为空,以便该函数可以应用于具有值的字典。我做了一个检查,您可以尝试一下。现在我遇到了以下错误:(文件“”,第13行,在get_val data_dict=list(行['data'].values())[0][0]键错误:(0,'发生在索引3')感谢Mark的回复。它适用于此示例数据。但是,如果我在大数据上应用它,我会得到一个错误-“Indexer:列表索引超出范围”。此外,其中一个数据值是{'bb3b_pasf':[]}。是否正因为如此?@Tad这可能是原因,如果检查它是否为
[],请添加一个条件
您能帮我解决这个问题吗?谢谢Mark的回复。它适用于这个示例数据。但是,如果我在大数据上应用它,我会得到一个错误-“Indexer:列表索引超出范围”。此外,其中一个数据值是{bb3b_pasf':[]}。可能是因为这个原因吗?@Tad这可能就是原因,如果检查它是否为
[]
,请添加一个条件。您能帮我解决这个条件吗?