【问题标题】:Iterating over Dataframe to add one迭代 Dataframe 以添加一个
【发布时间】:2019-07-12 15:54:27
【问题描述】:

这是在 Julia 1.1.1 中完成的 在 Windows 10 机器上。

我正在使用数据框 df,pmid 作为行名,unique(features) 作为列名。另外我还有一个变量pmids,pmids[i]对应features[i]。

我正在尝试使用每个单元格的 0 来迭代此数据帧。根据是否显示某个功能,将 1 加到单元格中,以便计算每个 pmid 的某个功能的提及次数。为了做到这一点,我使用了以下 for 循环。

feature_ids = unique(features)
df = hcat(df, initialize_df(feature_ids, nrow(df), 0))
for i in 1:length(features)
  pmid = pmids[i]
  feature = features[i]
  df[df[:,:pmid] .== pmid, Symbol(feature)] .+= 1
end

然而,在 julia v0.6.2 中,这有效,在 Julia v1.1.1 中,当我查看数据框时,它在 for 循环之后仍然由零填充。关于我做错了什么的任何想法

【问题讨论】:

  • 您能否分享一组指令来生成您的数据的婴儿版?

标签: dataframe julia


【解决方案1】:

这很可能是应该解决的问题:

for i in 1:length(features)
  pmid = pmids[i]
  feature = features[i]
  v = view(df, df[:,:pmid] .== pmid, Symbol(feature))
  v .+= 1
end

您的代码无法完全重现,因此我无法对其进行测试。几个小时后(希望如此),我将发布一个新版本的 DataFrames.jl 包,您的旧代码将在该包下按预期工作。

编辑:在 DataFrames.jl v0.19 下,您的旧代码应该可以正常工作。

【讨论】:

  • 使用新代码时,我收到以下错误。错误:LoadError:LoadError:语法:无效的分配位置“view(df,(df [:, :pmid] .== pmid),Symbol(feature))”
  • 已修复。 DataFrames.jl 0.19 发布后我也会更新答案
  • 使用视图解决了这个问题。谢谢。
  • 添加 - 请检查 DataFrames.jl v0.19 下的旧代码是否正常工作(应该)。
猜你喜欢
  • 2020-03-27
  • 2020-12-30
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
相关资源
最近更新 更多