[英]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
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.defaultdict
和extend
:
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.