猿问

从条目中具有不同长度的字典创建数据框

从条目中具有不同长度的字典创建数据框

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

如何创建每个列包含不同条目的数据框?

当我尝试:

pd.DataFrame(my_dict)

我明白了:

ValueError: arrays must all be the same length

有什么方法可以解决这个问 我很高兴Pandas可以使用NaN这些列填充较短的条目。


红颜莎娜
浏览 978回答 3
3回答

明月笑刀无情

在Python 3.x中:In [6]: d = dict( A = np.array([1,2]), B = np.array([1,2,3,4]) )In [7]: DataFrame(dict([ (k,Series(v)) for k,v in d.items() ]))Out[7]:     A  B0   1  11   2  22 NaN  33 NaN  4在Python 2.x中:替换d.items()为d.iteritems()。

森栏

这是一个简单的方法: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]: dfOut[22]:    0  1   2   3A  1  2 NaN NaNB  1  2   3   4In[23]: df.transpose()Out[23]:     A  B0   1  11   2  22 NaN  33 NaN  4

Helenr

一种整理语法的方法,但仍然与其他答案基本相同,如下所示:>>> 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    30  1.0  4  8.01  2.0  5  NaN2  3.0  6  NaN3  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    20  1.0  2.0  3.01  4.0  5.0  NaN2  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    20  1  4.0  6.01  2  5.0  NaN2  3  NaN  NaN在所有这些情况下,您必须小心检查pandas要为您的列猜测的数据类型。例如,包含任何NaN(缺失)值的列将转换为float。
随时随地看视频慕课网APP

相关分类

Python
我要回答