将 defaultdicts 的 iterable 连接到 DataFrame
Concatenating iterable of defaultdicts into DataFrame
我现在拥有的简化示例:
from collections import defaultdict
d1 = defaultdict(list)
d2 = defaultdict(list)
d1['a'] = [1, 2, 3]
d1['b'] = [True, True, True]
d2['a'] = [4, 5 , 6]
d2['b'] = [False, False, False]
想要的结果:
a b
0 1 True
1 2 True
2 3 True
3 4 False
4 5 False
5 6 False
下面这一行可以工作,但我正在寻找一种替代方法,它不必为每个 defaultdict 实例化一个单独的 DataFrame。
pd.concat([pd.DataFrame(d) for d in (d1, d2)]).reset_index(drop=True)
也可以开始于:
pd.DataFrame([d1, d2])
并将其转换为长格式。
您可以合并 dicts
和 然后 实例化您的数据框。
d3 = {k : d1[k] + d2[k] for k in d1}
d3
{'a': [1, 2, 3, 4, 5, 6], 'b': [True, True, True, False, False, False]}
df = pd.DataFrame(d3)
df
a b
0 1 True
1 2 True
2 3 True
3 4 False
4 5 False
5 6 False
自动合并多个对象:
d3 = defaultdict(list)
for d in dict_list:
for k in d:
d3[k].extend(d[k])
df = pd.DataFrame(d3)
通过使用您的 pd.concat
pd.DataFrame([d1, d2]).stack().apply(pd.Series).unstack(-2).\
T.sort_index(level=1).reset_index(drop=True)
Out[648]:
a b
0 1 1
1 2 1
2 3 1
3 4 0
4 5 0
5 6 0
我现在拥有的简化示例:
from collections import defaultdict
d1 = defaultdict(list)
d2 = defaultdict(list)
d1['a'] = [1, 2, 3]
d1['b'] = [True, True, True]
d2['a'] = [4, 5 , 6]
d2['b'] = [False, False, False]
想要的结果:
a b
0 1 True
1 2 True
2 3 True
3 4 False
4 5 False
5 6 False
下面这一行可以工作,但我正在寻找一种替代方法,它不必为每个 defaultdict 实例化一个单独的 DataFrame。
pd.concat([pd.DataFrame(d) for d in (d1, d2)]).reset_index(drop=True)
也可以开始于:
pd.DataFrame([d1, d2])
并将其转换为长格式。
您可以合并 dicts
和 然后 实例化您的数据框。
d3 = {k : d1[k] + d2[k] for k in d1}
d3
{'a': [1, 2, 3, 4, 5, 6], 'b': [True, True, True, False, False, False]}
df = pd.DataFrame(d3)
df
a b
0 1 True
1 2 True
2 3 True
3 4 False
4 5 False
5 6 False
自动合并多个对象:
d3 = defaultdict(list)
for d in dict_list:
for k in d:
d3[k].extend(d[k])
df = pd.DataFrame(d3)
通过使用您的 pd.concat
pd.DataFrame([d1, d2]).stack().apply(pd.Series).unstack(-2).\
T.sort_index(level=1).reset_index(drop=True)
Out[648]:
a b
0 1 1
1 2 1
2 3 1
3 4 0
4 5 0
5 6 0