2

我想为 SFrame 中的单个元素(即单行和单列)分配一个值。我正在使用 Python Notebook 并导入 graphlab。

我创建了一个尺寸为 16364 行 x 37 列的 SFrame。“测试”列包含零。

我使用以下语法来设置值:sf[1]['test'] = 3;

如果我然后输入: sf[1]['test']

然后我看到正确的值,即“3”

但如果我输入:sf

然后我只看到'test'列的所有行的值为零

sf.head() 或 sf['test'] 或 sf['test'].head() 也相同

我不明白为什么一种语法会显示“3”的值,而另一种则不会。sf[1]['test'] 中的值是 3 还是 0 ?

4

1 回答 1

4

SFrame 是不可变的,因此它们实际上不支持项目分配。您在这里看到的差异的原因是因为

sf[1]['test']

实际上根本不是指 SFrame。"sf[1]" 返回一个字典,其键与 SFrame 的列名匹配,值与 SFrame 的第二行匹配。当您为“sf[1]['test']”分配一个数字时,您正在更改返回的字典中“test”键的值,因此分配中不涉及 SFrame“sf”。仅引用“test”列的第二个值并分配值“3”的正确方法是:

sf['test'][1] = 3

这将返回此错误:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-c52dab41d5dd> in <module>()
----> 1 sf['test'][1] = 3

TypeError: 'SArray' object does not support item assignment
于 2016-02-22T15:35:06.447 回答