代码之家  ›  专栏  ›  技术社区  ›  daycaster

数据帧:存储和查询关键字数组

  •  1
  • daycaster  · 技术社区  · 8 年前

    using DataFrames, Query
    
    df = DataFrame()
    
    df[:Name]  =  ["Alice", "Arthur", "Bob", "Charlie"]
    df[:Diet]  =  [["apple", "orange", "onion"], 
                   [], 
                   ["banana", "onion", "cake"], 
                   ["olives", "peanut butter", "avocado"]]
    df[:Weight] = [70, 90, 80, 60]
    

    使用查询。jl:

    julia> q1 = @from i in df begin
                @where startswith(get(i.Name), "A")
                @select {i.Name, i.Diet, i.Weight}
                @collect DataFrame
           end
    2×3 DataFrames.DataFrame
    │ Row │ Name     │ Diet                   │ Weight │
    ├─────┼──────────┼────────────────────────┼────────┤
    │ 1   │ "Alice"  │ Any["apple", "orange"] │ 70     │
    │ 2   │ "Arthur" │ Any[]                  │ 90     │
    

    但是如何询问涉及关键字的查询。例如,谁吃洋葱?

    julia> q2 = @from i in df begin
                # @where ??? a keyword in i.Diet starting with "on"?
                @select {i.Name, i.Diet, i.Weight}
                @collect DataFrame
           end
    

    我知道 Query.jl 能够使用数据库。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Dan Getz    8 年前

    这个 @where 子句是一个Julia表达式,所以函数如下 any 可以使用点符号。明确地:

    julia> q2 = @from i in df begin
                @where any(startswith.(get(i.Diet), "on"))
                @select {i.Name, i.Diet, i.Weight}
                @collect DataFrame
           end
    2×3 DataFrames.DataFrame
    │ Row │ Name    │ Diet                            │ Weight │
    ├─────┼─────────┼─────────────────────────────────┼────────┤
    │ 1   │ "Alice" │ Any["apple", "orange", "onion"] │ 70     │
    │ 2   │ "Bob"   │ Any["banana", "onion", "cake"]  │ 80     │
    
    推荐文章