Python 来自具有嵌套列表的字典的数据帧

Python 来自具有嵌套列表的字典的数据帧,python,pandas,Python,Pandas,我有一个带有嵌套列表的python字典,我想把它变成一个数据框架 a = {'A': [1,2,3], 'B':['a','b','c'],'C':[[1,2],[3,4],[5,6]]} 我希望最终的数据帧如下所示: > A B C > 1 a 1 > 1 a 2 > 2 b 3 > 2 b 4 > 3 c 5 > 3 c 6 pd.DataFrame(a) > A B C >0 1

我有一个带有嵌套列表的python字典,我想把它变成一个数据框架

a = {'A': [1,2,3], 'B':['a','b','c'],'C':[[1,2],[3,4],[5,6]]}
我希望最终的数据帧如下所示:

> A  B  C
> 1  a  1
> 1  a  2
> 2  b  3
> 2  b  4
> 3  c  5
> 3  c  6
pd.DataFrame(a)

>   A   B     C
>0  1   a   [1, 2]
>1  2   b   [3, 4]
>2  3   c   [5, 6]
当我使用DataFrame命令时,它如下所示:

> A  B  C
> 1  a  1
> 1  a  2
> 2  b  3
> 2  b  4
> 3  c  5
> 3  c  6
pd.DataFrame(a)

>   A   B     C
>0  1   a   [1, 2]
>1  2   b   [3, 4]
>2  3   c   [5, 6]

我是否通过C元素使数据变长?

这就是我的想法:

In [53]: df
Out[53]: 
   A  B       C
0  1  a  [1, 2]
1  2  b  [3, 4]
2  3  c  [5, 6]
In [58]: s = df.C.apply(Series).unstack().reset_index(level=0, drop = True)

In [59]: s.name = 'C2'

In [61]: df.drop('C', axis = 1).join(s)
Out[61]: 
   A  B  C2
0  1  a   1
0  1  a   2
1  2  b   3
1  2  b   4
2  3  c   5
2  3  c   6

apply(Series)
提供了一个包含两列的数据帧。要在保留原始索引的同时将它们合并为一个索引,我使用
unstack
reset_index
删除了索引的第一级,它基本上保存了原始列表中的值的索引,该列表是C。然后我将其重新连接到df中。

这就是我想到的:

In [53]: df
Out[53]: 
   A  B       C
0  1  a  [1, 2]
1  2  b  [3, 4]
2  3  c  [5, 6]
In [58]: s = df.C.apply(Series).unstack().reset_index(level=0, drop = True)

In [59]: s.name = 'C2'

In [61]: df.drop('C', axis = 1).join(s)
Out[61]: 
   A  B  C2
0  1  a   1
0  1  a   2
1  2  b   3
1  2  b   4
2  3  c   5
2  3  c   6

apply(Series)
提供了一个包含两列的数据帧。要在保留原始索引的同时将它们合并为一个索引,我使用
unstack
reset_index
删除索引的第一级,它基本上保留了原始列表中的值的索引,该列表是C。然后我将其重新加入到df中。

是的,一种方法是首先处理你的字典(我假设您的词汇值包含值列表或嵌套列表,但不包含值列表和列表)。 逐步:

def f(x, y): return x + y

res={k: reduce(f, v) if any(isinstance(i, list) for i in v) else v for k,v in a.items()}
将为您提供:
{'A':[1,2,3],'C':[1,2,3,4,5,6],'B':['A','B','C']}

现在,您需要在词汇表中扩展列表:

m = max([len(v) for v in res.values()])

res1 = {k: reduce(f, [(m/len(v))*[i] for i in v]) for k,v in res.items()}
最后:

pd.DataFrame(res1)

是的,一种方法是首先处理你的词汇表(我假设你的词汇表值要么只包含值列表,要么包含嵌套列表,但不包含值和列表的列表)。 逐步:

def f(x, y): return x + y

res={k: reduce(f, v) if any(isinstance(i, list) for i in v) else v for k,v in a.items()}
将为您提供:
{'A':[1,2,3],'C':[1,2,3,4,5,6],'B':['A','B','C']}

现在,您需要在词汇表中扩展列表:

m = max([len(v) for v in res.values()])

res1 = {k: reduce(f, [(m/len(v))*[i] for i in v]) for k,v in res.items()}
最后:

pd.DataFrame(res1)

你的“盒子外”是什么样子:)你的“盒子外”是什么样子:)