Query

此包用于方便地操作 DataFrame 数据

Warn

本文档未经过审查,可能存在错误或过时用法

query 操作起始于宏 @from,第一个参数 i 代表着 df 中每一行来执行 query 命令,df 代表数据源,@where 执行过滤(filter)指令,@select 指令将源数据的列映射为新的列,后方接的是 {},代表具名元组; @collect 决定了返回的数据结构类型。当没有这一项时,返回的是一个 julia 标准的迭代数据类型;collect 后面不接类型时,返回一个 Array

julia> using DataFrames, Query

julia> df = DataFrame(name=["John", "Sally", "Roger"],
                      age=[54., 34., 79.],
                      children=[0, 2, 4])
3×3 DataFrame
│ Row │ name   │ age     │ children │
│     │ String │ Float64 │ Int64    │
├─────┼────────┼─────────┼──────────┤
│ 1   │ John   │ 54.0    │ 0        │
│ 2   │ Sally  │ 34.0    │ 2        │
│ 3   │ Roger  │ 79.0    │ 4        │

julia> q1 = @from i in df begin
            @where i.age > 40
            @select {number_of_children=i.children, i.name}
            @collect DataFrame
       end
2×2 DataFrame
│ Row │ number_of_children │ name   │
│     │ Int64              │ String │
├─────┼────────────────────┼────────┤
│ 1   │ 0                  │ John   │
│ 2   │ 4                  │ Roger  │

julia> q2 = @from i in df begin # 无@collect项
                   @where i.age > 40
                   @select {number_of_children=i.children, i.name}
              end;

julia> total_children = 0
0

julia> for i in q2
           global total_children += i.number_of_children
       end

julia> total_children
4

julia> y = [i.name for i in q2 if i.number_of_children > 0]
1-element Array{String,1}:
 "Roger"

julia> q3 = @from i in df begin
            @where i.age > 40 && i.children > 0
            @select i.name
            @collect
       end # 返回一个 Array类型
1-element Array{String,1}:
 "Roger"

  • 1

    https://github.com/noob-data-analaysis/data-analysis/blob/master/%5B%E6%95%B0%E6%8D%AE%E8%8E%B7%E5%BE%97DataFrames%5D%40Andy.Yang/DataFrames.md