2017-10-31 22 views
1

データフレームが、レコードごとに異なる数のキーワードを格納するタスクに適しているかどうかは疑問です。ここでは最小の作業例です:DataFrames:キーワードの配列の格納とクエリ

Query.jlを使用して
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] 

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がデータベースで作業できることを知っています。

答えて

3

@where句はジュリア式なので、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  │ 
+1

ダン、それは私が望んでいたものです... – daycaster

関連する問題