3

我正在尝试实现一个功能,将更长的列转换为 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 时,每个键都应该具有相同大小的值。那么,是否有任何选项可以像 Force 一样将 NA 填充到具有较小值的键中,以便每个键的大小相等。

你有什么其他的建议吗?

4

1 回答 1

4

Frame 构造函数中没有force参数,但dt.cbind(). 因此,您可以首先为字典中的每个键/值创建单独的帧,然后使用 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]
于 2020-05-21T17:19:44.700 回答