如何从字典中创建一个pydatatable数据框,该字典的键之间的值不相等?

问题描述 投票:1回答:1

[我正在尝试实现在pydatatable中将较长的列转换为较宽的列的功能,在此过程中,我遇到了字典问题,字典的每个键大小不同,如下面的代码所示。

long_to_wide_dict = {
'eggs':[3,5,6,9],
'fruits':[1,2,3,4,5],
'chicken':[5,10,2],
'beef':[10,10],
'bread':[5,4,3,2,1] 

}

我将这个字典传递给一个Frame对象,>]

dt.Frame(long_to_wide_dict)

这里将错误抛出为>]

ValueError:第1列的行数(5)与前面的列(4)不同

很明显,当数据结构传递给Frame时,每个键的值大小应相等。因此,是否有诸如强制将NA的值填充到键值较小的选项,以便每个键的大小相等。

您还有其他建议吗?。>

我正在尝试实现将pydatatable中较长的列转换为较宽的列的功能,在此过程中,我遇到了字典的问题,字典的大小各不相同,每个键为...

Frame构造函数中没有force参数,但dt.cbind()中有一个参数。因此,您可以首先为字典中的每个键/值创建单独的框架,然后使用force=True将它们绑定到一个框架中:

>>> dt.cbind([dt.Frame({k:v}) for k,v in long_to_wide_dict.items()], force=True)
   | eggs  fruits  chicken  beef  bread
-- + ----  ------  -------  ----  -----
 0 |    3       1        5    10      5
 1 |    5       2       10    10      4
 2 |    6       3        2    NA      3
 3 |    9       4       NA    NA      2
 4 |   NA       5       NA    NA      1

[5 rows x 5 columns]
python datatable
1个回答
1
投票

Frame构造函数中没有force参数,但dt.cbind()中有一个参数。因此,您可以首先为字典中的每个键/值创建单独的框架,然后使用force=True将它们绑定到一个框架中:

>>> dt.cbind([dt.Frame({k:v}) for k,v in long_to_wide_dict.items()], force=True)
   | eggs  fruits  chicken  beef  bread
-- + ----  ------  -------  ----  -----
 0 |    3       1        5    10      5
 1 |    5       2       10    10      4
 2 |    6       3        2    NA      3
 3 |    9       4       NA    NA      2
 4 |   NA       5       NA    NA      1

[5 rows x 5 columns]
© www.soinside.com 2019 - 2024. All rights reserved.