polars-df 0.1.3 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/Cargo.lock +142 -11
- data/Cargo.toml +5 -0
- data/ext/polars/Cargo.toml +17 -1
- data/ext/polars/src/apply/dataframe.rs +292 -0
- data/ext/polars/src/apply/mod.rs +254 -0
- data/ext/polars/src/apply/series.rs +1173 -0
- data/ext/polars/src/conversion.rs +180 -5
- data/ext/polars/src/dataframe.rs +146 -1
- data/ext/polars/src/error.rs +12 -0
- data/ext/polars/src/lazy/apply.rs +34 -2
- data/ext/polars/src/lazy/dataframe.rs +74 -3
- data/ext/polars/src/lazy/dsl.rs +136 -0
- data/ext/polars/src/lib.rs +199 -1
- data/ext/polars/src/list_construction.rs +100 -0
- data/ext/polars/src/series.rs +331 -0
- data/ext/polars/src/utils.rs +25 -0
- data/lib/polars/cat_name_space.rb +54 -0
- data/lib/polars/convert.rb +100 -0
- data/lib/polars/data_frame.rb +1558 -60
- data/lib/polars/date_time_expr.rb +2 -2
- data/lib/polars/date_time_name_space.rb +1484 -0
- data/lib/polars/dynamic_group_by.rb +49 -0
- data/lib/polars/expr.rb +4072 -107
- data/lib/polars/expr_dispatch.rb +8 -0
- data/lib/polars/functions.rb +192 -3
- data/lib/polars/group_by.rb +44 -3
- data/lib/polars/io.rb +20 -4
- data/lib/polars/lazy_frame.rb +800 -26
- data/lib/polars/lazy_functions.rb +687 -43
- data/lib/polars/lazy_group_by.rb +1 -0
- data/lib/polars/list_expr.rb +502 -5
- data/lib/polars/list_name_space.rb +346 -0
- data/lib/polars/rolling_group_by.rb +35 -0
- data/lib/polars/series.rb +934 -62
- data/lib/polars/string_expr.rb +189 -13
- data/lib/polars/string_name_space.rb +690 -0
- data/lib/polars/struct_name_space.rb +64 -0
- data/lib/polars/utils.rb +44 -0
- data/lib/polars/version.rb +1 -1
- data/lib/polars.rb +14 -1
- metadata +15 -3
@@ -0,0 +1,64 @@
|
|
1
|
+
module Polars
|
2
|
+
# Series.struct namespace.
|
3
|
+
class StructNameSpace
|
4
|
+
include ExprDispatch
|
5
|
+
|
6
|
+
self._accessor = "struct"
|
7
|
+
|
8
|
+
# @private
|
9
|
+
def initialize(series)
|
10
|
+
self._s = series._s
|
11
|
+
end
|
12
|
+
|
13
|
+
# Retrieve one of the fields of this `Struct` as a new Series.
|
14
|
+
#
|
15
|
+
# @return [Series]
|
16
|
+
def [](item)
|
17
|
+
if item.is_a?(Integer)
|
18
|
+
field(fields[item])
|
19
|
+
elsif item.is_a?(String)
|
20
|
+
field(item)
|
21
|
+
else
|
22
|
+
raise ArgumentError, "expected type Integer or String, got #{item.class.name}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Convert this Struct Series to a DataFrame.
|
27
|
+
#
|
28
|
+
# @return [DataFrame]
|
29
|
+
def to_frame
|
30
|
+
Utils.wrap_df(_s.struct_to_frame)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Get the names of the fields.
|
34
|
+
#
|
35
|
+
# @return [Array]
|
36
|
+
def fields
|
37
|
+
if _s.nil?
|
38
|
+
[]
|
39
|
+
else
|
40
|
+
_s.struct_fields
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Retrieve one of the fields of this `Struct` as a new Series.
|
45
|
+
#
|
46
|
+
# @param name [String]
|
47
|
+
# Name of the field
|
48
|
+
#
|
49
|
+
# @return [Series]
|
50
|
+
def field(name)
|
51
|
+
super
|
52
|
+
end
|
53
|
+
|
54
|
+
# Rename the fields of the struct.
|
55
|
+
#
|
56
|
+
# @param names [Array]
|
57
|
+
# New names in the order of the struct's fields
|
58
|
+
#
|
59
|
+
# @return [Series]
|
60
|
+
def rename_fields(names)
|
61
|
+
super
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/polars/utils.rb
CHANGED
@@ -11,6 +11,10 @@ module Polars
|
|
11
11
|
DataFrame._from_rbdf(df)
|
12
12
|
end
|
13
13
|
|
14
|
+
def self.wrap_ldf(ldf)
|
15
|
+
LazyFrame._from_rbldf(ldf)
|
16
|
+
end
|
17
|
+
|
14
18
|
def self.wrap_expr(rbexpr)
|
15
19
|
Expr._from_rbexpr(rbexpr)
|
16
20
|
end
|
@@ -37,6 +41,34 @@ module Polars
|
|
37
41
|
end
|
38
42
|
end
|
39
43
|
|
44
|
+
def self._to_ruby_datetime(value, dtype, tu: "ns", tz: nil)
|
45
|
+
if dtype == :date
|
46
|
+
# days to seconds
|
47
|
+
# important to create from utc. Not doing this leads
|
48
|
+
# to inconsistencies dependent on the timezone you are in.
|
49
|
+
Time.at(value * 86400).utc.to_date
|
50
|
+
# TODO fix dtype
|
51
|
+
elsif dtype.to_s.start_with?("datetime[")
|
52
|
+
if tz.nil? || tz == ""
|
53
|
+
if tu == "ns"
|
54
|
+
raise Todo
|
55
|
+
elsif tu == "us"
|
56
|
+
dt = Time.at(value / 1000000, value % 1000000, :usec).utc
|
57
|
+
elsif tu == "ms"
|
58
|
+
raise Todo
|
59
|
+
else
|
60
|
+
raise ArgumentError, "tu must be one of {{'ns', 'us', 'ms'}}, got #{tu}"
|
61
|
+
end
|
62
|
+
else
|
63
|
+
raise Todo
|
64
|
+
end
|
65
|
+
|
66
|
+
dt
|
67
|
+
else
|
68
|
+
raise NotImplementedError
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
40
72
|
def self.selection_to_rbexpr_list(exprs)
|
41
73
|
if exprs.is_a?(String) || exprs.is_a?(Expr) || exprs.is_a?(Series)
|
42
74
|
exprs = [exprs]
|
@@ -143,5 +175,17 @@ module Polars
|
|
143
175
|
def self.bool?(value)
|
144
176
|
value == true || value == false
|
145
177
|
end
|
178
|
+
|
179
|
+
def self._is_iterable_of(val, eltype)
|
180
|
+
val.all? { |x| x.is_a?(eltype) }
|
181
|
+
end
|
182
|
+
|
183
|
+
def self.is_str_sequence(val, allow_str: false)
|
184
|
+
if allow_str == false && val.is_a?(String)
|
185
|
+
false
|
186
|
+
else
|
187
|
+
val.is_a?(Array) && _is_iterable_of(val, String)
|
188
|
+
end
|
189
|
+
end
|
146
190
|
end
|
147
191
|
end
|
data/lib/polars/version.rb
CHANGED
data/lib/polars.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# ext
|
2
|
-
|
2
|
+
begin
|
3
|
+
require "polars/#{RUBY_VERSION.to_f}/polars"
|
4
|
+
rescue LoadError
|
5
|
+
require "polars/polars"
|
6
|
+
end
|
3
7
|
|
4
8
|
# stdlib
|
5
9
|
require "date"
|
@@ -8,8 +12,12 @@ require "date"
|
|
8
12
|
require "polars/expr_dispatch"
|
9
13
|
require "polars/batched_csv_reader"
|
10
14
|
require "polars/cat_expr"
|
15
|
+
require "polars/cat_name_space"
|
16
|
+
require "polars/convert"
|
11
17
|
require "polars/data_frame"
|
12
18
|
require "polars/date_time_expr"
|
19
|
+
require "polars/date_time_name_space"
|
20
|
+
require "polars/dynamic_group_by"
|
13
21
|
require "polars/exceptions"
|
14
22
|
require "polars/expr"
|
15
23
|
require "polars/functions"
|
@@ -19,17 +27,22 @@ require "polars/lazy_frame"
|
|
19
27
|
require "polars/lazy_functions"
|
20
28
|
require "polars/lazy_group_by"
|
21
29
|
require "polars/list_expr"
|
30
|
+
require "polars/list_name_space"
|
22
31
|
require "polars/meta_expr"
|
32
|
+
require "polars/rolling_group_by"
|
23
33
|
require "polars/series"
|
24
34
|
require "polars/slice"
|
25
35
|
require "polars/string_expr"
|
36
|
+
require "polars/string_name_space"
|
26
37
|
require "polars/struct_expr"
|
38
|
+
require "polars/struct_name_space"
|
27
39
|
require "polars/utils"
|
28
40
|
require "polars/version"
|
29
41
|
require "polars/when"
|
30
42
|
require "polars/when_then"
|
31
43
|
|
32
44
|
module Polars
|
45
|
+
extend Convert
|
33
46
|
extend Functions
|
34
47
|
extend IO
|
35
48
|
extend LazyFunctions
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polars-df
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rb_sys
|
@@ -39,6 +39,9 @@ files:
|
|
39
39
|
- README.md
|
40
40
|
- ext/polars/Cargo.toml
|
41
41
|
- ext/polars/extconf.rb
|
42
|
+
- ext/polars/src/apply/dataframe.rs
|
43
|
+
- ext/polars/src/apply/mod.rs
|
44
|
+
- ext/polars/src/apply/series.rs
|
42
45
|
- ext/polars/src/batched_csv.rs
|
43
46
|
- ext/polars/src/conversion.rs
|
44
47
|
- ext/polars/src/dataframe.rs
|
@@ -51,6 +54,7 @@ files:
|
|
51
54
|
- ext/polars/src/lazy/mod.rs
|
52
55
|
- ext/polars/src/lazy/utils.rs
|
53
56
|
- ext/polars/src/lib.rs
|
57
|
+
- ext/polars/src/list_construction.rs
|
54
58
|
- ext/polars/src/series.rs
|
55
59
|
- ext/polars/src/set.rs
|
56
60
|
- ext/polars/src/utils.rs
|
@@ -58,8 +62,12 @@ files:
|
|
58
62
|
- lib/polars.rb
|
59
63
|
- lib/polars/batched_csv_reader.rb
|
60
64
|
- lib/polars/cat_expr.rb
|
65
|
+
- lib/polars/cat_name_space.rb
|
66
|
+
- lib/polars/convert.rb
|
61
67
|
- lib/polars/data_frame.rb
|
62
68
|
- lib/polars/date_time_expr.rb
|
69
|
+
- lib/polars/date_time_name_space.rb
|
70
|
+
- lib/polars/dynamic_group_by.rb
|
63
71
|
- lib/polars/exceptions.rb
|
64
72
|
- lib/polars/expr.rb
|
65
73
|
- lib/polars/expr_dispatch.rb
|
@@ -70,11 +78,15 @@ files:
|
|
70
78
|
- lib/polars/lazy_functions.rb
|
71
79
|
- lib/polars/lazy_group_by.rb
|
72
80
|
- lib/polars/list_expr.rb
|
81
|
+
- lib/polars/list_name_space.rb
|
73
82
|
- lib/polars/meta_expr.rb
|
83
|
+
- lib/polars/rolling_group_by.rb
|
74
84
|
- lib/polars/series.rb
|
75
85
|
- lib/polars/slice.rb
|
76
86
|
- lib/polars/string_expr.rb
|
87
|
+
- lib/polars/string_name_space.rb
|
77
88
|
- lib/polars/struct_expr.rb
|
89
|
+
- lib/polars/struct_name_space.rb
|
78
90
|
- lib/polars/utils.rb
|
79
91
|
- lib/polars/version.rb
|
80
92
|
- lib/polars/when.rb
|
@@ -98,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
98
110
|
- !ruby/object:Gem::Version
|
99
111
|
version: '0'
|
100
112
|
requirements: []
|
101
|
-
rubygems_version: 3.3.
|
113
|
+
rubygems_version: 3.3.26
|
102
114
|
signing_key:
|
103
115
|
specification_version: 4
|
104
116
|
summary: Blazingly fast DataFrames for Ruby
|