我有超过 10 亿个观测值的大数据,我需要执行一些字符串操作,速度很慢。
我的代码很简单:
DT[, var := some_function(var2)]
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,data.table
在使用 调用时使用多线程by
,并且我正在尝试利用它来并行化此操作。为此,我可以创建一个临时石斑鱼变量,例如
DT[, grouper := .I %/% 100]
Run Code Online (Sandbox Code Playgroud)
并做
DT[, var := some_function(var2), by = grouper]
Run Code Online (Sandbox Code Playgroud)
我尝试使用小样本数据进行一些基准测试,但令人惊讶的是我没有看到性能改进。所以我的问题是:
data.table
与 一起使用时是否使用多线程by
?data.table
在这里使用多线程?仅供参考,当我导入 data.table 时,我发现我的一半核心启用了多线程,所以我猜这里不存在 openMP 问题。
自定义日期在 RMarkdown-pdf 中有效,但我注意到 Quarto 不行。
如何在 Quarto YAML 中使用自定义日期?
---
title: "Some pdf document"
author: "me"
date: "Spring 2022" <- I would like to use this
format: pdf
----
Run Code Online (Sandbox Code Playgroud)
---
title: "Some pdf document"
author: "me"
date: "Last update : `r Sys.Date()`" <- Or, like this
format: pdf
----
Run Code Online (Sandbox Code Playgroud)
当前的 Quarto-pdf 仅生成 %m/%d/%Y 格式日期。
我的问题与这个问题相关,但它要求dplyr
解决方案。
我想做的是执行外连接并创建一个指示变量来解释合并结果,就像pandas
orSTATA
会做的那样。
具体来说,我希望_merge
在完全外连接操作之后有一个列,指示与 left_only 或 right_only 或两者的合并结果,如下例所示。
更新:我已经更新了示例
key1 = c('a','b','c','d','e')
v1 = c(1,2,3, NA, 5)
key2 = c('a','b','d','f')
v2 = c(4,5,6,7)
df1 = data.frame(key=key1,v1)
df2 = data.frame(key=key2,v2)
> df1
key v1
1: a 1
2: b 2
3: c 3
4: d NA
5: e 5
> df2
key v2
1: a 4
2: b 5
3: d 6
4: f 7
# merge result I'd like to have
key …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将函数应用于 pandas 列,然后检索函数的属性。具体来说,我使用 TextBlob 从一列意见中提取情感和极性。
这是我尝试运行的示例代码。
opinion = ['good', 'bad','horrible']
df = pd.DataFrame(opinion, columns=['comment'])
df.head()
comment
0 good
1 bad
2 horrible
Run Code Online (Sandbox Code Playgroud)
我试图运行的伪代码是
from textblob import TextBlob
df['sentiment'] = df.comment.apply(TextBlob).sentiment
Run Code Online (Sandbox Code Playgroud)
这会引发 AttributeError。
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in
----> 1 df.comment.apply(TextBlob).sentiment
~\AppData\Local\Continuum\miniconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
5177 if self._info_axis._can_hold_identifiers_and_holds_name(name):
5178 return self[name]
-> 5179 return object.__getattribute__(self, name)
5180
5181 def __setattr__(self, name, value):
AttributeError: 'Series' object has no attribute 'sentiment'
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用getattr()
函数来实现这一点,但它不起作用。
df.comment.apply(TextBlob).apply(getattr,sentiment)
Run Code Online (Sandbox Code Playgroud)
如何应用函数并获取列的属性?
.csv
我尝试读取多个文件arrow::open_dataset()
,但由于列类型不一致而引发错误。
我发现这个问题主要与我的问题有关,但我正在尝试一种稍微不同的方法。
我想使用arrow
一个示例 CSV 文件来利用类型的自动检测。弄清楚所有类型的列非常耗时。
然后,我采用架构并更正一些导致问题的列。
然后我使用更新后的架构来读取所有文件。
以下是我的方法:
data = read_csv_arrow('data.csv.gz', as_data_frame = F) # has more than 30 columns
sch = data$schema
print(sch)
Run Code Online (Sandbox Code Playgroud)
Schema
trade_id: int64
secid: int64
side: int64
...
nonstd: int64
flags: string
Run Code Online (Sandbox Code Playgroud)
我想将'trade_id'
列类型从int64
更改为string
并将其他列保持不变。
如何更新架构?
我正在使用 R arrow
,但我想相关的答案pyarrow
可能适用。
r ×3
data.table ×2
apache-arrow ×1
apply ×1
dataframe ×1
pandas ×1
pdf ×1
pyarrow ×1
python-3.x ×1
quarto ×1