假设我有一个包含10个键值对的字典。每个条目包含一个numpy数组。但是,它们的数组长度并不都是相同的。
如何创建一个dataframe,其中每个列包含一个不同的条目?
当我尝试的时候:
pd.DataFrame(my_dict)
我得到了:
ValueError: arrays must all be the same length
有什么方法可以克服这个问题吗?我很高兴Pandas使用NaN
来填充那些列,以获得较短的条目。
发布于 2014-08-09 18:06:16
这里有一个简单的方法:
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
发布于 2018-05-04 07:00:59
下面是一种整理语法的方法,但本质上还是要做与其他答案相同的事情:
>>> 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
列表也存在类似的语法:
>>> 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
列表的另一种语法是:
>>> 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
您可能还需要转置结果和/或更改列数据类型(浮点型、整型等)。
发布于 2015-09-04 02:35:27
虽然这不能直接回答OP的问题。当我有不相等的数组时,我发现这是一个很好的解决方案,我想分享一下:
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
https://stackoverflow.com/questions/19736080
复制相似问题