polars-df 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Cargo.lock +1946 -0
- data/Cargo.toml +5 -0
- data/ext/polars/Cargo.toml +31 -1
- data/ext/polars/src/conversion.rs +237 -43
- data/ext/polars/src/dataframe.rs +278 -1
- data/ext/polars/src/lazy/dataframe.rs +304 -10
- data/ext/polars/src/lazy/dsl.rs +1096 -5
- data/ext/polars/src/lazy/meta.rs +41 -0
- data/ext/polars/src/lazy/mod.rs +1 -0
- data/ext/polars/src/lib.rs +313 -0
- data/ext/polars/src/series.rs +168 -5
- data/lib/polars/cat_expr.rb +13 -0
- data/lib/polars/data_frame.rb +312 -7
- data/lib/polars/date_time_expr.rb +143 -0
- data/lib/polars/expr.rb +488 -0
- data/lib/polars/lazy_frame.rb +184 -6
- data/lib/polars/lazy_functions.rb +4 -0
- data/lib/polars/list_expr.rb +108 -0
- data/lib/polars/meta_expr.rb +33 -0
- data/lib/polars/series.rb +513 -11
- data/lib/polars/string_expr.rb +117 -0
- data/lib/polars/struct_expr.rb +27 -0
- data/lib/polars/utils.rb +27 -0
- data/lib/polars/version.rb +1 -1
- data/lib/polars.rb +6 -1
- metadata +10 -2
data/lib/polars/lazy_frame.rb
CHANGED
@@ -8,6 +8,51 @@ module Polars
|
|
8
8
|
ldf
|
9
9
|
end
|
10
10
|
|
11
|
+
# def columns
|
12
|
+
# end
|
13
|
+
|
14
|
+
# def dtypes
|
15
|
+
# end
|
16
|
+
|
17
|
+
# def schema
|
18
|
+
# end
|
19
|
+
|
20
|
+
# def width
|
21
|
+
# end
|
22
|
+
|
23
|
+
# def include?(key)
|
24
|
+
# end
|
25
|
+
|
26
|
+
# clone handled by initialize_copy
|
27
|
+
|
28
|
+
# def [](item)
|
29
|
+
# end
|
30
|
+
|
31
|
+
# def to_s
|
32
|
+
# end
|
33
|
+
# alias_method :inspect, :to_s
|
34
|
+
|
35
|
+
# def write_json
|
36
|
+
# end
|
37
|
+
|
38
|
+
# def pipe
|
39
|
+
# end
|
40
|
+
|
41
|
+
# def describe_plan
|
42
|
+
# end
|
43
|
+
|
44
|
+
# def describe_optimized_plan
|
45
|
+
# end
|
46
|
+
|
47
|
+
# def show_graph
|
48
|
+
# end
|
49
|
+
|
50
|
+
# def sort
|
51
|
+
# end
|
52
|
+
|
53
|
+
# def profile
|
54
|
+
# end
|
55
|
+
|
11
56
|
def collect(
|
12
57
|
type_coercion: true,
|
13
58
|
predicate_pushdown: true,
|
@@ -42,8 +87,21 @@ module Polars
|
|
42
87
|
Utils.wrap_df(ldf.collect)
|
43
88
|
end
|
44
89
|
|
90
|
+
# def fetch
|
91
|
+
# end
|
92
|
+
|
93
|
+
def lazy
|
94
|
+
self
|
95
|
+
end
|
96
|
+
|
97
|
+
# def cache
|
98
|
+
# end
|
99
|
+
|
100
|
+
# def cleared
|
101
|
+
# end
|
102
|
+
|
45
103
|
def filter(predicate)
|
46
|
-
|
104
|
+
_from_rbldf(
|
47
105
|
_ldf.filter(
|
48
106
|
Utils.expr_to_lit_or_expr(predicate, str_to_lit: false)._rbexpr
|
49
107
|
)
|
@@ -52,7 +110,7 @@ module Polars
|
|
52
110
|
|
53
111
|
def select(exprs)
|
54
112
|
exprs = Utils.selection_to_rbexpr_list(exprs)
|
55
|
-
|
113
|
+
_from_rbldf(_ldf.select(exprs))
|
56
114
|
end
|
57
115
|
|
58
116
|
def groupby(by, maintain_order: false)
|
@@ -61,6 +119,15 @@ module Polars
|
|
61
119
|
LazyGroupBy.new(lgb, self.class)
|
62
120
|
end
|
63
121
|
|
122
|
+
# def groupby_rolling
|
123
|
+
# end
|
124
|
+
|
125
|
+
# def groupby_dynamic
|
126
|
+
# end
|
127
|
+
|
128
|
+
# def join_asof
|
129
|
+
# end
|
130
|
+
|
64
131
|
def join(
|
65
132
|
other,
|
66
133
|
left_on: nil,
|
@@ -76,7 +143,7 @@ module Polars
|
|
76
143
|
end
|
77
144
|
|
78
145
|
if how == "cross"
|
79
|
-
return
|
146
|
+
return _from_rbldf(
|
80
147
|
_ldf.join(
|
81
148
|
other._ldf, [], [], allow_parallel, force_parallel, how, suffix
|
82
149
|
)
|
@@ -94,7 +161,7 @@ module Polars
|
|
94
161
|
raise ArgumentError, "must specify `on` OR `left_on` and `right_on`"
|
95
162
|
end
|
96
163
|
|
97
|
-
|
164
|
+
_from_rbldf(
|
98
165
|
self._ldf.join(
|
99
166
|
other._ldf,
|
100
167
|
rbexprs_left,
|
@@ -123,17 +190,128 @@ module Polars
|
|
123
190
|
when Expr
|
124
191
|
rbexprs << e._rbexpr
|
125
192
|
when Series
|
126
|
-
rbexprs =
|
193
|
+
rbexprs = Utils.lit(e)._rbexpr
|
127
194
|
else
|
128
195
|
raise ArgumentError, "Expected an expression, got #{e}"
|
129
196
|
end
|
130
197
|
end
|
131
198
|
|
132
|
-
|
199
|
+
_from_rbldf(_ldf.with_columns(rbexprs))
|
133
200
|
end
|
134
201
|
|
202
|
+
# def with_context
|
203
|
+
# end
|
204
|
+
|
135
205
|
def with_column(column)
|
136
206
|
with_columns([column])
|
137
207
|
end
|
208
|
+
|
209
|
+
# def drop
|
210
|
+
# end
|
211
|
+
|
212
|
+
def rename(mapping)
|
213
|
+
existing = mapping.keys
|
214
|
+
_new = mapping.values
|
215
|
+
_from_rbldf(_ldf.rename(existing, _new))
|
216
|
+
end
|
217
|
+
|
218
|
+
# def reverse
|
219
|
+
# end
|
220
|
+
|
221
|
+
# def shift
|
222
|
+
# end
|
223
|
+
|
224
|
+
# def shift_and_fill
|
225
|
+
# end
|
226
|
+
|
227
|
+
# def slice
|
228
|
+
# end
|
229
|
+
|
230
|
+
# def limit
|
231
|
+
# end
|
232
|
+
|
233
|
+
# def head
|
234
|
+
# end
|
235
|
+
|
236
|
+
# def tail
|
237
|
+
# end
|
238
|
+
|
239
|
+
# def last
|
240
|
+
# end
|
241
|
+
|
242
|
+
# def first
|
243
|
+
# end
|
244
|
+
|
245
|
+
# def with_row_count
|
246
|
+
# end
|
247
|
+
|
248
|
+
# def take_every
|
249
|
+
# end
|
250
|
+
|
251
|
+
# def fill_null
|
252
|
+
# end
|
253
|
+
|
254
|
+
def fill_nan(fill_value)
|
255
|
+
if !fill_value.is_a?(Expr)
|
256
|
+
fill_value = Utils.lit(fill_value)
|
257
|
+
end
|
258
|
+
_from_rbldf(_ldf.fill_nan(fill_value._rbexpr))
|
259
|
+
end
|
260
|
+
|
261
|
+
# def std
|
262
|
+
# end
|
263
|
+
|
264
|
+
# def var
|
265
|
+
# end
|
266
|
+
|
267
|
+
# def max
|
268
|
+
# end
|
269
|
+
|
270
|
+
# def min
|
271
|
+
# end
|
272
|
+
|
273
|
+
# def sum
|
274
|
+
# end
|
275
|
+
|
276
|
+
# def mean
|
277
|
+
# end
|
278
|
+
|
279
|
+
# def median
|
280
|
+
# end
|
281
|
+
|
282
|
+
# def quantile
|
283
|
+
# end
|
284
|
+
|
285
|
+
# def explode
|
286
|
+
# end
|
287
|
+
|
288
|
+
# def unique
|
289
|
+
# end
|
290
|
+
|
291
|
+
# def drop_nulls
|
292
|
+
# end
|
293
|
+
|
294
|
+
# def melt
|
295
|
+
# end
|
296
|
+
|
297
|
+
# def map
|
298
|
+
# end
|
299
|
+
|
300
|
+
# def interpolate
|
301
|
+
# end
|
302
|
+
|
303
|
+
# def unnest
|
304
|
+
# end
|
305
|
+
|
306
|
+
private
|
307
|
+
|
308
|
+
def initialize_copy(other)
|
309
|
+
super
|
310
|
+
self._ldf = _ldf._clone
|
311
|
+
end
|
312
|
+
|
313
|
+
def _from_rbldf(rb_ldf)
|
314
|
+
self.class._from_rbldf(rb_ldf)
|
315
|
+
end
|
138
316
|
end
|
139
317
|
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
module Polars
|
2
|
+
class ListExpr
|
3
|
+
attr_accessor :_rbexpr
|
4
|
+
|
5
|
+
def initialize(expr)
|
6
|
+
self._rbexpr = expr._rbexpr
|
7
|
+
end
|
8
|
+
|
9
|
+
def lengths
|
10
|
+
Utils.wrap_expr(_rbexpr.arr_lengths)
|
11
|
+
end
|
12
|
+
|
13
|
+
def sum
|
14
|
+
Utils.wrap_expr(_rbexpr.lst_sum)
|
15
|
+
end
|
16
|
+
|
17
|
+
def max
|
18
|
+
Utils.wrap_expr(_rbexpr.lst_max)
|
19
|
+
end
|
20
|
+
|
21
|
+
def min
|
22
|
+
Utils.wrap_expr(_rbexpr.lst_min)
|
23
|
+
end
|
24
|
+
|
25
|
+
def mean
|
26
|
+
Utils.wrap_expr(_rbexpr.lst_mean)
|
27
|
+
end
|
28
|
+
|
29
|
+
def sort(reverse: false)
|
30
|
+
Utils.wrap_expr(_rbexpr.lst_sort(reverse))
|
31
|
+
end
|
32
|
+
|
33
|
+
def reverse
|
34
|
+
Utils.wrap_expr(_rbexpr.lst_reverse)
|
35
|
+
end
|
36
|
+
|
37
|
+
def unique
|
38
|
+
Utils.wrap_expr(_rbexpr.lst_unique)
|
39
|
+
end
|
40
|
+
|
41
|
+
# def concat
|
42
|
+
# end
|
43
|
+
|
44
|
+
def get(index)
|
45
|
+
index = Utils.expr_to_lit_or_expr(index, str_to_lit: false)._rbexpr
|
46
|
+
Utils.wrap_expr(_rbexpr.lst_get(index))
|
47
|
+
end
|
48
|
+
|
49
|
+
def [](item)
|
50
|
+
get(item)
|
51
|
+
end
|
52
|
+
|
53
|
+
def first
|
54
|
+
get(0)
|
55
|
+
end
|
56
|
+
|
57
|
+
def last
|
58
|
+
get(-1)
|
59
|
+
end
|
60
|
+
|
61
|
+
def contains(item)
|
62
|
+
Utils.wrap_expr(_rbexpr.arr_contains(Utils.expr_to_lit_or_expr(item)._rbexpr))
|
63
|
+
end
|
64
|
+
|
65
|
+
def join(separator)
|
66
|
+
Utils.wrap_expr(_rbexpr.lst_join(separator))
|
67
|
+
end
|
68
|
+
|
69
|
+
def arg_min
|
70
|
+
Utils.wrap_expr(_rbexpr.lst_arg_min)
|
71
|
+
end
|
72
|
+
|
73
|
+
def arg_max
|
74
|
+
Utils.wrap_expr(_rbexpr.lst_arg_max)
|
75
|
+
end
|
76
|
+
|
77
|
+
def diff(n: 1, null_behavior: "ignore")
|
78
|
+
Utils.wrap_expr(_rbexpr.lst_diff(n, null_behavior))
|
79
|
+
end
|
80
|
+
|
81
|
+
def shift(periods = 1)
|
82
|
+
Utils.wrap_expr(_rbexpr.lst_shift(periods))
|
83
|
+
end
|
84
|
+
|
85
|
+
def slice(offset, length = nil)
|
86
|
+
offset = Utils.expr_to_lit_or_expr(offset, str_to_lit: false)._rbexpr
|
87
|
+
length = Utils.expr_to_lit_or_expr(length, str_to_lit: false)._rbexpr
|
88
|
+
Utils.wrap_expr(_rbexpr.lst_slice(offset, length))
|
89
|
+
end
|
90
|
+
|
91
|
+
def head(n = 5)
|
92
|
+
slice(0, n)
|
93
|
+
end
|
94
|
+
|
95
|
+
def tail(n = 5)
|
96
|
+
offset = -Utils.expr_to_lit_or_expr(n, str_to_lit: false)
|
97
|
+
slice(offset, n)
|
98
|
+
end
|
99
|
+
|
100
|
+
# def to_struct(n_field_strategy: "first_non_null", name_generator: nil)
|
101
|
+
# Utils.wrap_expr(_rbexpr.lst_to_struct(n_field_strategy, name_generator))
|
102
|
+
# end
|
103
|
+
|
104
|
+
def eval(expr, parallel: false)
|
105
|
+
Utils.wrap_expr(_rbexpr.lst_eval(expr._rbexpr, parallel))
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Polars
|
2
|
+
class MetaExpr
|
3
|
+
attr_accessor :_rbexpr
|
4
|
+
|
5
|
+
def initialize(expr)
|
6
|
+
self._rbexpr = expr._rbexpr
|
7
|
+
end
|
8
|
+
|
9
|
+
def ==(other)
|
10
|
+
_rbexpr.meta_eq(other._rbexpr)
|
11
|
+
end
|
12
|
+
|
13
|
+
def !=(other)
|
14
|
+
!(self == other)
|
15
|
+
end
|
16
|
+
|
17
|
+
def pop
|
18
|
+
_rbexpr.meta_pop.map { |e| Utils.wrap_expr(e) }
|
19
|
+
end
|
20
|
+
|
21
|
+
def root_names
|
22
|
+
_rbexpr.meta_roots
|
23
|
+
end
|
24
|
+
|
25
|
+
def output_name
|
26
|
+
_rbexpr.meta_output_name
|
27
|
+
end
|
28
|
+
|
29
|
+
def undo_aliases
|
30
|
+
Utils.wrap_expr(_rbexpr.meta_undo_aliases)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|