标签: py-datatable

py-datatable 'in' 运算符?

我无法in使用预定义的项目列表执行标准操作。我正在寻找做这样的事情:

# Construct a simple example frame
from datatable import *
df = Frame(V1=['A','B','C','D'], V2=[1,2,3,4])

# Filter frame to a list of items (THIS DOES NOT WORK)
items = ['A','B']
df[f.V1 in items,:]

Run Code Online (Sandbox Code Playgroud)

此示例导致错误:

TypeError: A boolean value cannot be used as a row selector

不幸的是,似乎没有用于in操作的内置对象。我想使用类似于%in%R 语言原生的运算符之类的东西。有没有什么方法可以在python中完成这个?

我可以通过使用多个“等于”运算符来采用这种方法,但是当您要考虑大量项目时,这很不方便:

df[(f.V1 == 'A') | (f.V1 == 'B'),:]
Run Code Online (Sandbox Code Playgroud)

数据表 0.10.1
蟒蛇 3.6

python datatable python-3.x py-datatable

7
推荐指数
2
解决办法
209
查看次数

根据是否在列表中过滤python数据表的行

我是使用 python 数据表的新手,这是我正在关注的教程

如何过滤掉某个列中的值包含在列表中的行?

基本上这是我正在使用的代码:

    import datatable as dt
    sfr = dt.fread(os.path.join(dirName, 'Results.csv'))

sfr
Out[25]: 
         |       ioid  itemtype  date       itemid           tid  value
-------- + ----------  --------  --------  -------  ------------  -------
       0 |          1         1  7-1-2022     9015           531   0.0283
       1 |          1         1  7-1-2022     9015           532   0.0071
       2 |          1         1  7-1-2022     9016           534   0.0065
       3 |          1         1  7-1-2022     9017          1018   0.0005
Run Code Online (Sandbox Code Playgroud)

我正在尝试执行以下操作

ids = [9016, 9017]
sft[dt.f.itemid.isin(ids)]
Run Code Online (Sandbox Code Playgroud)

但是,我无法使语法起作用。

期望的输出是:

         |       ioid  itemtype  date       itemid           tid  value …
Run Code Online (Sandbox Code Playgroud)

python python-3.8 py-datatable

6
推荐指数
1
解决办法
84
查看次数

在 google colab 机器中安装新数据表版本 1.0.0 时出错

我可以看到今天刚刚发布了新版本的数据表,我正在尝试将其安装在一台 google colab 机器上。

!pip install datatable
Run Code Online (Sandbox Code Playgroud)

它显示错误如下:

    Collecting datatable
  Using cached https://files.pythonhosted.org/packages/04/0c/bff6497afcf95a3257c4168b95c8acab91c8ef234fe473eaf6689d582da1/datatable-1.0.0.tar.gz
  Getting requirements to build wheel ... done
ERROR: Exception:
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/cli/base_command.py", line 153, in _main
    status = self.run(options, args)
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/commands/install.py", line 382, in run
    resolver.resolve(requirement_set)
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/legacy_resolve.py", line 201, in resolve
    self._resolve_one(requirement_set, req)
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/legacy_resolve.py", line 365, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/legacy_resolve.py", line 313, in _get_abstract_dist_for
    req, self.session, self.finder, self.require_hashes
  File "/usr/local/lib/python3.7/dist-packages/pip/_internal/operations/prepare.py", line 224, in prepare_linked_requirement
    req, self.req_tracker, finder, …
Run Code Online (Sandbox Code Playgroud)

py-datatable

5
推荐指数
1
解决办法
1530
查看次数

在 Python 中分配多列的任何更简单的方法,如 R data.table :=

我想知道是否有更简单的方法在 Python 中分配多列,就像:=R 中的那样data.table

例如,在 Python 中我必须这样写:

df['Col_A'] = df.A/df.B
df['Col_B'] = df.C/df.D
df['Col_C'] = df.E/df.F * 1000000    
df['Col_D'] = df.G/df.H * 1000000
Run Code Online (Sandbox Code Playgroud)

然而,这只是 R 中的一行代码data.table

df[, ':='(Col_A = A/B, Col_B = C/D, Col_C = E/F*1000000, Col_B = G/H*1000000)]
Run Code Online (Sandbox Code Playgroud)

python calculated-columns multiple-columns assign py-datatable

5
推荐指数
1
解决办法
259
查看次数

如何过滤在 Pydatatable 框架的 I 表达式中传递的多个值的观察结果?

我有一个包含两列的数据框,如下所示,

DT_EX = dt.Frame({'film':['Don','Warriors','Dragon','Chicago','Lion','Don','Chicago','Warriors'],
                  'gross':[400,500,600,100,200,300,900,1000]})
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,我想过滤电影是唐或芝加哥的观察,如下代码所示,

DT_EX[((f.film=="Don") | (f.film=="Chicago")),:]
Run Code Online (Sandbox Code Playgroud)

在一秒钟内,我将为 3 个值应用过滤器,

DT_EX[((f.film=="Don") | (f.film=="Chicago") | (f.film=="Lion")),:]
Run Code Online (Sandbox Code Playgroud)

在过滤超过 5 或 10 个值的情况下,我们应该为这些多个值做一个逻辑表达式,这肯定是一项耗时的任务。

是否有任何数据表方法可以更快地完成它?就像%in% %chin%在 R 中有一些过滤选项可用data.table

python py-datatable

4
推荐指数
1
解决办法
109
查看次数

使用 pydatatable 以 R datable 的 .SDcols 风格更新或添加多列

给定虹膜数据,我想添加与找到的所有数字列相对应的新列。我可以通过明确列出每个数字列来做到这一点:

from datatable import fread, f, mean, update
iris_dt = fread("https://h2o-public-test-data.s3.amazonaws.com/smalldata/iris/iris.csv")
iris_dt[:, update(C0_dist_from_mean = dt.abs(f.C0 - mean(f.C0)),
                  C1_dist_from_mean = dt.abs(f.C1 - mean(f.C1)),
                  C2_dist_from_mean = dt.abs(f.C2 - mean(f.C2)),
                  C3_dist_from_mean = dt.abs(f.C3 - mean(f.C1)))]
Run Code Online (Sandbox Code Playgroud)

但这样我就硬编码了列名。使用 R 数据表可以轻松获得更可靠的方法.SDcols

library(data.table)
iris = fread("https://h2o-public-test-data.s3.amazonaws.com/smalldata/iris/iris.csv")
cols = names(sapply(iris, class)[sapply(iris, class)=='numeric'])
iris[, paste0(cols,"_dist_from_mean") := lapply(.SD, function(x) {abs(x-mean(x))}),
     .SDcols=cols]
Run Code Online (Sandbox Code Playgroud)

今天有没有办法对 pydatatable 采取类似的方法?

我确实意识到如何获取 py-datatable 中的所有数字列,例如如下所示:

iris_dt[:, f[float]]
Run Code Online (Sandbox Code Playgroud)

但 R 中使用的最后一部分却让.SDcols我困惑。

python datatable r py-datatable

4
推荐指数
1
解决办法
154
查看次数

Python data.table 行过滤器正则表达式

相当于 %like% 的 python 的 data.table 是什么?

简短示例:

dt_foo_bar = dt.Frame({"n": [1, 3], "s": ["foo", "bar"]})  
dt_foo_bar[re.match("foo",f.s),:] #works to filter by "foo"
Run Code Online (Sandbox Code Playgroud)

我原以为这样的事情会起作用:

dt_foo_bar[re.match("fo",f.s),:] 
Run Code Online (Sandbox Code Playgroud)

但它返回“预期的字符串或类似字节的对象”。我很想开始在 Python 中使用新的 data.tables 包,就像我在 R 中使用它的方式一样,但我更多地处理文本数据而不是数字数据。

提前致谢。

python py-datatable

3
推荐指数
1
解决办法
527
查看次数

如何在Python数据表中填充空值?

Pandas 库有一个非常好的函数调用 .fillna() ,它可以用来填充空值

df = df.fillna(0)
Run Code Online (Sandbox Code Playgroud)

我正在使用数据表库来完成我的新作业,因为它在数据表中加载和处理大量数据的速度非常快。

fillnapython的Datatable库中是否存在这样的函数?

或者我们必须用什么替代方法来填充数据表中的缺失值?

python pandas py-datatable

3
推荐指数
1
解决办法
2267
查看次数

如何删除 python 数据表 h2oai 中的重复项

python中的数据表包(https://github.com/h2oai/datatable/)可以计算列中唯一值的数量,有没有办法用这个包删除重复值,或者我必须使用慢速的pandas包裹?

python duplicates py-datatable

2
推荐指数
1
解决办法
817
查看次数

如何在数据表框架中按组查找唯一值

我创建了一个数据表框架如下,

DT_EX = dt.Frame({'cid':[1,2,1,2,3,2,4,2,4,5],
                  'cust_life_cycle':['Lead','Active','Lead','Active','Inactive','Lead','Active','Lead','Inactive','Lead']})
Run Code Online (Sandbox Code Playgroud)

在这里,我有三个独特的客户生命周期,这些计数中的每一个都被发现为

DT_EX[:, count(), by(f.cust_life_cycle)]
Run Code Online (Sandbox Code Playgroud)

连同它,我有五个客户 ID,这些计数如下

DT_EX[:, count(), by(f.cid)]
Run Code Online (Sandbox Code Playgroud)

现在我想看看每个客户生命周期中存在多少个唯一客户 ID,

DT_EX[:, {'unique_cids':dt.unique(f.cid)}, by(f.cust_life_cycle)]
Run Code Online (Sandbox Code Playgroud)

它应该显示为潜在客户有 3 个唯一客户 ID,例如 (1,2,5),活动用户有 2 个唯一客户 ID (2,4),依此类推。

我无法按预期得到它,你能告诉我如何修复它吗?

仅供参考:我试图在 R data.table 框架上重现相同的内容,它的工作原理。

DT_EX[, uniqueN(cid), by=cust_life_cycle]
Run Code Online (Sandbox Code Playgroud)

python py-datatable

2
推荐指数
1
解决办法
163
查看次数