微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 pipe.jl 过滤数据帧行?

如何解决如何使用 pipe.jl 过滤数据帧行?

数据框:

julia> df3
486×4 DataFrame
│ Row │ Suicides │ County       │ Year        │ Gender    │
│     │ Int64    │ String       │ SubStrin…   │ SubStrin… │
├─────┼──────────┼──────────────┼─────────────┼───────────┤
│ 1   │ 0        │ Asotin       │ (2012)      │ Female    │
│ 2   │ 0        │ Benton       │ (2012)      │ Female    │
│ 3   │ 0        │ Chelan       │ (2012)      │ Female    │
│ 4   │ 0        │ Clallam      │ (2012)      │ Female    │
│ 5   │ 1        │ Clark        │ (2012)      │ Female    │
│ 6   │ 0        │ Columbia     │ (2012)      │ Female    │
│ 7   │ 0        │ Cowlitz      │ (2012)      │ Female    │
│ 8   │ 0        │ Douglas      │ (2012)      │ Female    │
│ 9   │ 0        │ Grays Harbor │ (2012)      │ Female    │
│ 10  │ 0        │ Island       │ (2012)      │ Female    │
│ 11  │ 0        │ Jefferson    │ (2012)      │ Female    │
│ 12  │ 3        │ King         │ (2012)      │ Female    │
│ 13  │ 0        │ Kitsap       │ (2012)      │ Female    │
│ 14  │ 0        │ Lewis        │ (2012)      │ Female    │
│ 15  │ 0        │ Mason        │ (2012)      │ Female    │
│ 16  │ 0        │ Okanogan     │ (2012)      │ Female    │
│ 17  │ 0        │ Pacific      │ (2012)      │ Female    │
│ 18  │ 1        │ Pierce       │ (2012)      │ Female    │
│ 19  │ 0        │ Skagit       │ (2012)      │ Female    │
│ 20  │ 0        │ Snohomish    │ (2012)      │ Female    │
│ 21  │ 0        │ Spokane      │ (2012)      │ Female    │
⋮
│ 465 │ 1        │ Columbia     │ (2008-2012) │ Total     │
│ 466 │ 1        │ Cowlitz      │ (2008-2012) │ Total     │
│ 467 │ 2        │ Douglas      │ (2008-2012) │ Total     │
│ 468 │ 6        │ Grays Harbor │ (2008-2012) │ Total     │
│ 469 │ 2        │ Island       │ (2008-2012) │ Total     │
│ 470 │ 1        │ Jefferson    │ (2008-2012) │ Total     │
│ 471 │ 33       │ King         │ (2008-2012) │ Total     │
│ 472 │ 1        │ Kitsap       │ (2008-2012) │ Total     │
│ 473 │ 1        │ Lewis        │ (2008-2012) │ Total     │
│ 474 │ 1        │ Mason        │ (2008-2012) │ Total     │
│ 475 │ 2        │ Okanogan     │ (2008-2012) │ Total     │
│ 476 │ 3        │ Pacific      │ (2008-2012) │ Total     │
│ 477 │ 20       │ Pierce       │ (2008-2012) │ Total     │
│ 478 │ 3        │ Skagit       │ (2008-2012) │ Total     │
│ 479 │ 11       │ Snohomish    │ (2008-2012) │ Total     │
│ 480 │ 6        │ Spokane      │ (2008-2012) │ Total     │
│ 481 │ 2        │ Stevens      │ (2008-2012) │ Total     │
│ 482 │ 2        │ Thurston     │ (2008-2012) │ Total     │
│ 483 │ 1        │ Walla Walla  │ (2008-2012) │ Total     │
│ 484 │ 5        │ Whatcom      │ (2008-2012) │ Total     │
│ 485 │ 1        │ Whitman      │ (2008-2012) │ Total     │
│ 486 │ 8        │ Yakima       │ (2008-2012) │ Total     │

用管道过滤行,如下:

julia> df3 = @pipe df3 |>
           filter(string(:Suicides) => !=("Total"),_) |>
           filter(string(:Year) => !=("(2008-2012)"),_)

但是,得到错误,如下:

ERROR: MethodError: objects of type Pair{String,Base.Fix2{typeof(!=),String}} are not callable
Stacktrace:
 [1] (::DataFrames.var"#53#54"{Pair{String,String}}})(::DataFrameRow{DataFrame,DataFrames.Index}) at ./none:0
 [2] iterate at ./generator.jl:47 [inlined]
 [3] collect at ./array.jl:665 [inlined]
 [4] filter(::Pair{String,String}},::DataFrame) at /opt/julia/julia-1.4.1/share/julia/stdlib/v1.4/packages/DataFrames/yH0f6/src/abstractdataframe/abstractdataframe.jl:758
 [5] top-level scope at REPL[26]:1

请指导我使用 pipe.jl 过滤数据帧行

解决方法

首先,我建议您查看 REPL 中的示例。

help?> filter
filter(function,df::AbstractDataFrame)
  ...

  Examples
  ≡≡≡≡≡≡≡≡≡≡
  ...

  julia> filter(row -> row[:x] > 1,df)
  2×2 DataFrame
  │ Row │ x     │ y      │
  │     │ Int64 │ String │
  ├─────┼───────┼────────┤
  │ 1   │ 3     │ b      │
  │ 2   │ 2     │ a      │

如你所见,第一个参数应该是一个函数,它接受一个作为参数。

第二件事是 =>-> 在 Julia 中是完全不同的东西。第一个创建一个键值 Pair,第二个只是一个 lambda。

另外,奇怪的是,您将许多自杀事件与 "Total" 进行比较,我认为您打算比较 Gender

所以更正后的代码可能是这样的:

df3 = @pipe df3 |>
           filter(row -> row[:Gender] != "Total",_) |>
           filter(row -> row[:Year] != "(2008-2012)",_)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。