from datatable import dt, f, g, by, update, join, sort
tt = dt.Frame({'a' : ['A1','A2','A3'], 'b':[100,200,300]})
print(tt)
| a b
-- + -- ---
0 | A1 100
1 | A2 200
2 | A3 300
[3 rows x 2 columns]
字符串
如何删除a
列中的“A”,并以datatable方式将其作为数字分配给新列“c”(即w/o pandas)?
在pandas
的帮助下,它看起来像这样。
tt['c'] = tt.to_pandas()['a'].str.replace('A','').astype(int)
型
datatable本机版本不太起作用
tt[:, update(c = [int(x.replace('A','')) for x in f.a])]
TypeError: 'datatable.FExpr' object is not iterable
型
顺便说一下,对于python pandas和R data.table的频繁用户,是否有一个高级/完整的食谱可以帮助从R data.table转换到py-datatable?网站上有一个页面,但还不够。
4条答案
按热度按时间30byixjq1#
这里有一个黑客,不特别规模好:
步骤1:将
a
列转储到原生python中,并创建一个值元组:字符串
步骤2:cbind返回
tt
帧:型
如果你只需要A,那么你可以使用下面的代码,它仍然不能很好地扩展(想象一下你在列中有空值),并且很粗糙(我们必须索引到列表中才能得到我们想要的):
型
如前所述,这并不能很好地扩展,此外,它也不能提供datatable所追求的速度。
目前,datatable还没有很好的字符串操作支持(我相信库维护人员目前正在处理这个问题,以及其他一些请求的特性)
kx1ctssn2#
我知道这是一个老问题,但如果有人仍然在寻找这个-在刚刚发布的1.0.0中,可以做以下事情:
字符串
上面的例子使用了字符串列上的切片,即依赖于一个固定的格式。正则表达式也有一个
.re
部分,但我只看到match
,而不是extract
。8yparm6h3#
这是我做的一个黑客来得到你想要的。我仍然在学习数据表,所以请容忍我,而我完全进入它。
首先,将数据表转换成一个框架。执行我前面列出的操作,然后将框架转换回数据表。Walla,现在你有了一个带有所需结果的数据表。
我是这么做的
字符串
其输出将是:
的数据
您可以拆分列并重命名字段。
型
输出将是:
初始DataFrame将是:
型
新的DataFrame看起来像这样:
型
或者,你也可以使用
extract
和正则表达式来实现。型
它会给你给予同样的结果:
型
在此选项中,它不会创建需要删除的附加列
型
l5tcr1uw4#
下面这个就可以了。
字符串