Python 将一系列DICT转换为数据帧的最有效方法

Python 将一系列DICT转换为数据帧的最有效方法,python,pandas,Python,Pandas,以下形式的给定数据: ydata=[{'a':1,'b':2},{'a':3,'d':4},无] yindex=[50,51,52] y=pd.Series(ydata,name='y',index=pd.index(yindex,name='i')) 将此y系列转换为如下数据帧的最有效、甚至是最惯用/首选的方法是什么 a b d i 50 1.0 2.0 NaN 51 3.0 NaN 4.0 52 NaN NaN Na

以下形式的给定数据:

ydata=[{'a':1,'b':2},{'a':3,'d':4},无]
yindex=[50,51,52]
y=pd.Series(ydata,name='y',index=pd.index(yindex,name='i'))
将此
y
系列转换为如下数据帧的最有效、甚至是最惯用/首选的方法是什么

      a    b    d
i                
50  1.0  2.0  NaN
51  3.0  NaN  4.0
52  NaN  NaN  NaN
一个简单的解决方案是:

pd.DataFrame([rec if rec else{}对于y.tolist()中的rec,
索引=y.index)

使用
pd.concat

df = pd.concat([pd.DataFrame(v, index=[i]) for i,v in y.iteritems()])
print(df)
      a    b    d
50  1.0  2.0  NaN
51  3.0  NaN  4.0
52  NaN  NaN  NaN


df=pd.DataFrame(ydata,index=yindex)
应该执行以下操作trick@BryceWayne我只是构造
y
来演示一下。数据已经从数据帧中的一列内部传入。我想您的解决方案在这里应该是很好的。请尝试
pd.DataFrame(y.to_dict()).T
PS如果您有重复的索引,这将失败。这看起来不错,因为它使用了很多功能。然而,至少在小玩具数据上,它似乎比我天真的列表理解要慢得多。不确定性能在多大程度上可以扩展到更多行。让我们看看是否还有其他有趣的答案。@shadowtalker我认为重复的答案
y.apply(pd.Series)
适合你。我很想知道哪个更快。我最终选择了我原来的解决方案,因为它似乎比两者都快得多。
d = y[y.notna()]
df = pd.DataFrame(d.tolist(), index=d.index).reindex(y.index)