将列表中的字典转换为pandas中的行

我目前有这样的数据框:

《将列表中的字典转换为pandas中的行》

我想将“列表”列分解为行.我想使用字典中的键作为列名,所以理想情况下我希望数据框看起来像这样:

eventId listingId currentPrice
103337923 1307675567 ...
103337923 1307675567 ...
103337923 1307675567 ...

这就是我得到的:print(listing_df.head(3).to_dict())

《将列表中的字典转换为pandas中的行》

最佳答案 绝对应该有更好的方法来做到这一点.但这很有效. 🙂

df1 = pd.DataFrame(
    {"a": [1,2,3,4],
     "b": [5,6,7,8],
     "c": [[{"x": 17, "y": 18, "z": 19}, {"x": 27, "y": 28, "z": 29}],
           [{"x": 37, "y": 38, "z": 39}, {"x": 47, "y": 48, "z": 49}],
           [{"x": 57, "y": 58, "z": 59}, {"x": 27, "y": 68, "z": 69}],
           [{"x": 77, "y": 78, "z": 79}, {"x": 27, "y": 88, "z": 89}]]})

《将列表中的字典转换为pandas中的行》

现在,您可以从上面创建一个新的DataFrame:

df2 = pd.DataFrame(columns=df1.columns)
df2_index = 0
for row in df1.iterrows():
    one_row = row[1]
    for list_value in row[1]["c"]:
        one_row["c"] = list_value
        df2.loc[df2_index] = one_row
        df2_index += 1

输出是您需要的方式:

《将列表中的字典转换为pandas中的行》

现在我们已将列表扩展为单独的行,您可以进一步将json扩展为列:

df2[list(df2["c"].head(1).tolist()[0].keys())] = df2["c"].apply(
    lambda x: pd.Series([x[key] for key in x.keys()]))

《将列表中的字典转换为pandas中的行》

希望能帮助到你!

点赞