小编ira*_*ira的帖子

从 Python 中的 R data.table 访问数据的推荐方法是什么?我可以避免将数据写入光盘吗?

是否有一些推荐的方法可以将数据从 R(以 形式data.table)传递到 Python,而无需将数据保存到磁盘?我知道我可以使用来自 R 的 python 模块使用reticulate(我想同样的事情可以在另一侧使用rpy2),但是从我读到的内容来看,这会损害库的整体性能,因此有很大的机会与尝试使用或使用 rpy2运行相比,最好将我的 r 存储到光盘data.table并使用 python 和运行从光盘读取相同的数据。lightgbmlightgbmreticulatedata.table

为什么我不坚持使用 R 或 Python

我更喜欢使用 r data.table(而不是Pandas)进行数据操作,因为它速度更快,内存效率更高,并且具有许多我喜欢的功能,例如不等连接、滚动连接、笛卡尔连接以及非常简单的融合和铸件。我也喜欢这样,每当我data.table在堆栈溢出中提出相关问题时,我都会很快得到高质量的答案,而Pandas我还没有那么成功。但是,有些任务我更喜欢 Python,例如梯度提升或神经网络。

python r data.table

11
推荐指数
1
解决办法
251
查看次数

如何有效地找到R data.table中具有非零值的最后前一行

介绍

我试图找到一种最佳方法,如何找到给定列中最后一个非零值的行,并在该行上返回不同列的值。我想在R data.table中做到这一点,我正在寻找该操作的最大效率。

让我们有一个像这样的数据表:

set.seed(123)
DT = data.table(x=rep(c("b","a","c"),each=6),
                y=rep(1:6, 3),
                z = rbinom(18, 1, 0.3))
Run Code Online (Sandbox Code Playgroud)

这提供给我们以下数据表:

    x y z
 1: b 1 0
 2: b 2 1
 3: b 3 0
 4: b 4 1
 5: b 5 1
 6: b 6 0
 7: a 1 0
 8: a 2 1
 9: a 3 0
10: a 4 0
11: a 5 1
12: a 6 0
13: c 1 0
14: c 2 0
15: c 3 0 …
Run Code Online (Sandbox Code Playgroud)

r data.table

6
推荐指数
2
解决办法
58
查看次数

如何用EOF解决fread txt的问题?

我试图从ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt上读取气候站信息.但是,由于第一行未完全填充(缺少最后两个cols)并且第5列包含空格,因此我无法完成阅读:

fread('ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/ghcnd-stations.txt',sep=)
Run Code Online (Sandbox Code Playgroud)

它返回错误消息:

 Expected sep (' ') but new line, EOF (or other non printing character) ends 
 field 5 when detecting types from point 0: AGE00135039  35.7297    0.6500   
 50.0    ORAN-HOPITAL MILITAIRE     
Run Code Online (Sandbox Code Playgroud)

如何在阅读此txt文件时正确应用fread?谢谢!

import r data.table

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

如何对data.table中的每一行进行排序?

data.table在每一行中对值进行排序的方式是什么?我可以轻松地编写一个循环来逐行进行排序,但我认为这不是一种非常聪明的做事方式。

例子:

来个赞吧data.table

df = data.table(ID = c('a', 'b', 'c', 'd', 'e', 'f'),
                v1 = c(1,2,1,3,4,5),
                v2 = c(2,3,6,1,0,2),
                v3 = c(0,0,1,2,3,5))
Run Code Online (Sandbox Code Playgroud)

我可以使用for loop类似这样的方式对此进行排序:

for (i in 1:nrow(df))
{
  df[i, 2:4] = sort(df[i, 2:4], decreasing = T)
}
Run Code Online (Sandbox Code Playgroud)

它给出了预期的结果:

   ID v1 v2 v3
1:  a  2  1  0
2:  b  3  2  0
3:  c  6  1  1
4:  d  3  2  1
5:  e  4  3  0
6:  f  5  5  2
Run Code Online (Sandbox Code Playgroud)

但它的做事方式似乎很慢。

r data.table

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

如何控制 pyarrow.dataset.write_dataset 是否会覆盖以前的数据或追加到它?

我正在尝试使用pyarrow.dataset.write_dataset函数将数据写入 hdfs。但是,如果我写入已存在且包含一些数据的目录,则数据将被覆盖,而不是创建新文件。有没有一种方法可以方便地“附加”到现有的数据集,而不必先读入所有数据?我不需要将数据放在一个文件中,我只是不想删除旧的文件。

我目前所做的和不起作用的:

import pyarrow.dataset as ds
parquet_format = ds.ParquetFileFormat()
write_options = parquet_format.make_write_options(
use_deprecated_int96_timestamps = True,
coerce_timestamps = None, 
allow_truncated_timestamps = True)
ds.write_dataset(data = data, base_dir = 'my_path', filesystem = hdfs_filesystem, format = parquet_format, file_options = write_options)
Run Code Online (Sandbox Code Playgroud)

python pyarrow

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

将注释放在多行语句之间(带有行继续)

当我编写以下pyspark命令时:

# comment 1
df = df.withColumn('explosion', explode(col('col1'))).filter(col('explosion')['sub_col1'] == 'some_string') \
    # comment 2
    .withColumn('sub_col2', from_unixtime(col('explosion')['sub_col2'])) \
    # comment 3
    .withColumn('sub_col3', from_unixtime(col('explosion')['sub_col3']))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

.withColumn('sub_col2', from_unixtime(col('explosion')['sub_col2']))
^
IndentationError: unexpected indent
Run Code Online (Sandbox Code Playgroud)

有没有办法在pyspark的多行命令行之间写注释?

python comments pyspark

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

PySpark 数据框:在自连接后处理重复的列名

我有一个这样的数据框(受到这个问题的启发,设置略有不同):

df3 = hive_context.createDataFrame([
    Row(a=107831, f=3),
    Row(a=107531, f=2),
    Row(a=125231, f=2)
])
Run Code Online (Sandbox Code Playgroud)

基于此,我创建了两个新对象。每个都是原始数据帧的子集:

from pyspark.sql.functions import col

df1 = (df3
  .filter(((col('a') == 107831) & (col('f') == 3))|
          ((col('a') == 125231) & (col('f') == 2))))

df2 = (df3
  .filter(((col('a') == 107831) & (col('f') == 3))|
          ((col('a') == 107531) & (col('f') == 2))))
Run Code Online (Sandbox Code Playgroud)

然后,我想加入这两个数据集并f从每个数据集获取列,如下所示:

a = (df1
  .join(df2, (df1['a'] == df2['a']), how = 'full')
  .select(df1['f'], df2['f']).collect())
Run Code Online (Sandbox Code Playgroud)

但是,我得到 [Row(f=None, f=None), Row(f=2, f=2), Row(f=3, f=3)]

而不是所需的[Row(f=3, f=4), Row(f=None, f=2), Row(f=2, …

pyspark pyspark-sql

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

R data.table - 按不同采样比例分组采样

我想从 a 中有效地按组进行随机样本data.table,但应该可以为每个组抽取不同的比例。

如果我想从每个组中抽取分数,我可以从这个问题和相关sampling_fraction答案中得到启发,做一些类似的事情:

DT = data.table(a = sample(1:2), b = sample(1:1000,20))

group_sampler <- function(data, group_col, sample_fraction){
  # this function samples sample_fraction <0,1> from each group in the data.table
  # inputs:
  #   data - data.table
  #   group_col - column(s) used to group by
  #   sample_fraction - a value between 0 and 1 indicating what % of each group should be sampled
  data[,.SD[sample(.N, ceiling(.N*sample_fraction))],by = eval(group_col)]
}

# what % of data should be …
Run Code Online (Sandbox Code Playgroud)

r data.table oversampling

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