首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从条目长度不同的字典创建数据帧

从条目长度不同的字典创建数据帧
EN

Stack Overflow用户
提问于 2013-11-02 05:59:10
回答 6查看 111.6K关注 0票数 154

假设我有一个包含10个键值对的字典。每个条目包含一个numpy数组。但是,它们的数组长度并不都是相同的。

如何创建一个dataframe,其中每个列包含一个不同的条目?

当我尝试的时候:

代码语言:javascript
复制
pd.DataFrame(my_dict)

我得到了:

代码语言:javascript
复制
ValueError: arrays must all be the same length

有什么方法可以克服这个问题吗?我很高兴Pandas使用NaN来填充那些列,以获得较短的条目。

EN

回答 6

Stack Overflow用户

发布于 2014-08-09 18:06:16

这里有一个简单的方法:

代码语言:javascript
复制
In[20]: my_dict = dict( A = np.array([1,2]), B = np.array([1,2,3,4]) )
In[21]: df = pd.DataFrame.from_dict(my_dict, orient='index')
In[22]: df
Out[22]: 
   0  1   2   3
A  1  2 NaN NaN
B  1  2   3   4
In[23]: df.transpose()
Out[23]: 
    A  B
0   1  1
1   2  2
2 NaN  3
3 NaN  4
票数 102
EN

Stack Overflow用户

发布于 2018-05-04 07:00:59

下面是一种整理语法的方法,但本质上还是要做与其他答案相同的事情:

代码语言:javascript
复制
>>> mydict = {'one': [1,2,3], 2: [4,5,6,7], 3: 8}

>>> dict_df = pd.DataFrame({ key:pd.Series(value) for key, value in mydict.items() })

>>> dict_df

   one  2    3
0  1.0  4  8.0
1  2.0  5  NaN
2  3.0  6  NaN
3  NaN  7  NaN

列表也存在类似的语法:

代码语言:javascript
复制
>>> mylist = [ [1,2,3], [4,5], 6 ]

>>> list_df = pd.DataFrame([ pd.Series(value) for value in mylist ])

>>> list_df

     0    1    2
0  1.0  2.0  3.0
1  4.0  5.0  NaN
2  6.0  NaN  NaN

列表的另一种语法是:

代码语言:javascript
复制
>>> mylist = [ [1,2,3], [4,5], 6 ]

>>> list_df = pd.DataFrame({ i:pd.Series(value) for i, value in enumerate(mylist) })

>>> list_df

   0    1    2
0  1  4.0  6.0
1  2  5.0  NaN
2  3  NaN  NaN

您可能还需要转置结果和/或更改列数据类型(浮点型、整型等)。

票数 21
EN

Stack Overflow用户

发布于 2015-09-04 02:35:27

虽然这不能直接回答OP的问题。当我有不相等的数组时,我发现这是一个很好的解决方案,我想分享一下:

from pandas documentation

代码语言:javascript
复制
In [31]: d = {'one' : Series([1., 2., 3.], index=['a', 'b', 'c']),
   ....:      'two' : Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
   ....: 

In [32]: df = DataFrame(d)

In [33]: df
Out[33]: 
   one  two
a    1    1
b    2    2
c    3    3
d  NaN    4
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19736080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档