简体   繁体   English

Python - Pandas - 扁平化字典列列表

[英]Python - Pandas - flatten list of dicts column

I've imported a.csv as dataframe but I have a column composed as list of dicts.我已经将 a.csv 导入为 dataframe 但我有一列由字典列表组成。 How can I flatten it into multiple columns/new df?我怎样才能把它展平成多列/新的 df?

example below:下面的例子:

在此处输入图像描述

You can extract each row into a series and concat them to a dataframe:您可以将每一行提取到一个系列中并将它们连接到一个 dataframe:

import pandas as pd

data = []
for row in range(len(df_ass)):
    data.append(pd.Series(df_ass['associations'][row]['order_rows'][0]))
    
df = pd.concat(data)

With a dataframe like与 dataframe 一样

df = pd.DataFrame({
    "associations" :[
        '{"order_rows": [{"id": 1, "p_id": 12}, {"id": 2, "p_id": 12}]}',
        '{"order_rows": [{"id": 3, "p_id": 13}, {"id": 4, "p_id": 14}, {"id": 5, "p_id": 15}]}'
    ]
})

you can do你可以做

df = pd.DataFrame(df.associations.map(eval).str.get("order_rows").explode().to_list())

or或者

df = pd.json_normalize(df.associations.map(eval), record_path="order_rows")

to get要得到

   id  p_id
0   1    12
1   2    12
2   3    13
3   4    14
4   5    15

solved like this:像这样解决:

df=pd.read_csv(fName, sep=",", usecols=["associations"]) 
list_rows_dicts=[]
for index, row in df.iterrows():
    row_dict=eval(row["associations"])
    for d in row_dict["order_rows"]:
        list_rows_dicts.append(d)
csv_final_df=pd.DataFrame(list_rows_dicts)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM