词典列表和词典中的词典

时间:2020-05-05 17:06:24

标签: python pandas

我想从词典列表中创建一个干净的熊猫数据框,其中字典中键的值也可以是词典列表。

这是我的初始列表:

[ {'product_id':1, 
   'categories': [{'toy_id':'x1', 'sales':50}, {'toy_id':'x2', 'sales':50}], 
   'buyers': [{'buyer_id':'y1' , 'buyer_age':22}, {'buyer_id':'y2' ,'buyer_age':31}]}]

最初,我将列表转换为熊猫数据框

list_pd = pd.DataFrame(list)

尽管这会将我的列表转换为pandas数据框,但是有两列称为“类别”和“购买者”,它们仍然是词典列表。我不确定如何将这些列转换为键名是列名而值在行中的列。我的最终结果将如下所示:

____product_id____toy_id____sales____buyer_id____buyer_age

________1_________x1_______50_______y1__________22____
________1_________x2_______50_______y2__________31____

这是我尝试过的代码(我试图将我以前的代码再次转换为数据帧,以为可能会破坏字典):

list_pd_2 = pd.DataFrame(list_pd)

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

一旦像您一样创建了list_pd,就可以在列类别和买方上同时使用explode,然后从每个展开的列中创建一个数据框,同时保留原始索引concat数据帧和join到“ product_id”列,例如:

s_cat = list_pd['categories'].explode()
s_buy = list_pd['buyers'].explode()
df_f = list_pd[['product_id']]\
              .join(pd.concat([pd.DataFrame(s_cat.tolist(), index=s_cat.index), 
                               pd.DataFrame(s_buy.tolist(), index=s_buy.index)], 
                              axis=1))
print (df_f)
   product_id toy_id  sales buyer_id  buyer_age
0           1     x1     50       y1         22
0           1     x2     50       y2         31

答案 1 :(得分:1)

您可以利用熊猫json_normalize函数:获取两个数据框(类别和购买者)并与熊猫concat合并回去:

        $signatureImage = file_get_contents('signatures/' . $id . '_SIGNATURE.png');
        $lob = oci_new_descriptor($conn, OCI_D_LOB);
        $signatureSql = oci_parse($conn, "UPDATE DT_WEB SET DT_SIGNATURE = EMPTY_BLOB() WHERE DT_ID = '$id' RETURNING DT_SIGNATURE INTO :SIGNATUREIMG");
        oci_bind_by_name($signatureSql, ':SIGNATUREIMG', $lob, -1, OCI_B_BLOB);
        oci_execute($signatureSql, OCI_DEFAULT);
        $lob->saveFile($signatureImage);
        $lob->free();
        oci_free_statement($signatureSql);