簡體   English   中英

如何從包含列表的字典列表中獲取扁平 dataframe?

[英]How to get a flatten dataframe from lists of dictionaries which contain lists?

我正在嘗試將這種數據結構扁平化為“普通”dataframe。

原始數據是包含列表的字典列表。

數據如下所示(可重現的示例):

data = [{'A':[1,2,3,4], 'B':[11,12,13,14]}, {'A':[5,6,7,8], 'B':[15,16,17,18]}]

我想要的 output 應該是以下 pandas dataframe:

Out[01]: 
   A   B
0  1  11
1  2  12
2  3  13
3  4  14
4  5  15
5  6  16
6  7  17
7  8  18

我怎樣才能達到這個結果? 謝謝

您可以使用pd.Series.explode

data = [{'A':[1,2,3,4], 'B':[11,12,13,14]}, {'A':[5,6,7,8], 'B':[15,16,17,18]}]

df = pd.DataFrame(data).apply(pd.Series.explode).reset_index(drop=True)

   A   B
0  1  11
1  2  12
2  3  13
3  4  14
4  5  15
5  6  16
6  7  17
7  8  18

或使用collections.defaultdict

from collections import defaultdict
new = defaultdict(list)

for d in data:
    for k, v in d.items():
        new[k].extend(v)

df = pd.DataFrame(new)

   A   B
0  1  11
1  2  12
2  3  13
3  4  14
4  5  15
5  6  16
6  7  17
7  8  18

您可以簡單地生成每個 DataFrame 並將它們全部連接起來:

import pandas as pd

data = [{'A':[1,2,3,4], 'B':[11,12,13,14]}, {'A':[5,6,7,8], 'B':[15,16,17,18]}]

df = pd.concat((pd.DataFrame(elm) for elm in data), ignore_index=True)
print(df)


   A   B
0  1  11
1  2  12
2  3  13
3  4  14
4  5  15
5  6  16
6  7  17
7  8  18

試試下面的代碼:


import pandas as pd
data = [{'A':[1,2,3,4], 'B':[11,12,13,14]}, {'A':[5,6,7,8], 'B':[15,16,17,18]}]

df = pd.DataFrame(data).apply(pd.Series.explode).reset_index(drop=True)

print(df)

為了提高性能,使用collections.defaultdictextend

from collections import defaultdict

d = defaultdict(list)
for x in data:
    for k, v in x.items():
        d[k].extend(v)
df = pd.DataFrame(d)
print (df)
   A   B
0  1  11
1  2  12
2  3  13
3  4  14
4  5  15
5  6  16
6  7  17
7  8  18

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM