polars-df 0.9.0-aarch64-linux → 0.10.0-aarch64-linux
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/Cargo.lock +90 -45
- data/LICENSE-THIRD-PARTY.txt +602 -75
- data/README.md +1 -0
- data/lib/polars/3.1/polars.so +0 -0
- data/lib/polars/3.2/polars.so +0 -0
- data/lib/polars/3.3/polars.so +0 -0
- data/lib/polars/array_expr.rb +6 -2
- data/lib/polars/batched_csv_reader.rb +4 -2
- data/lib/polars/data_frame.rb +148 -74
- data/lib/polars/date_time_expr.rb +10 -4
- data/lib/polars/date_time_name_space.rb +9 -3
- data/lib/polars/expr.rb +37 -34
- data/lib/polars/functions/lazy.rb +3 -3
- data/lib/polars/functions/whenthen.rb +74 -5
- data/lib/polars/io.rb +18 -6
- data/lib/polars/lazy_frame.rb +39 -36
- data/lib/polars/list_expr.rb +6 -2
- data/lib/polars/series.rb +12 -10
- data/lib/polars/string_expr.rb +1 -0
- data/lib/polars/utils.rb +54 -0
- data/lib/polars/version.rb +1 -1
- data/lib/polars/whenthen.rb +83 -0
- data/lib/polars.rb +1 -2
- metadata +3 -4
- data/lib/polars/when.rb +0 -16
- data/lib/polars/when_then.rb +0 -19
data/README.md
CHANGED
data/lib/polars/3.1/polars.so
CHANGED
Binary file
|
data/lib/polars/3.2/polars.so
CHANGED
Binary file
|
data/lib/polars/3.3/polars.so
CHANGED
Binary file
|
data/lib/polars/array_expr.rb
CHANGED
@@ -333,6 +333,10 @@ module Polars
|
|
333
333
|
#
|
334
334
|
# @param index [Integer]
|
335
335
|
# Index to return per sub-array
|
336
|
+
# @param null_on_oob [Boolean]
|
337
|
+
# Behavior if an index is out of bounds:
|
338
|
+
# true -> set as null
|
339
|
+
# false -> raise an error
|
336
340
|
#
|
337
341
|
# @return [Expr]
|
338
342
|
#
|
@@ -353,9 +357,9 @@ module Polars
|
|
353
357
|
# # │ [4, 5, 6] ┆ -2 ┆ 5 │
|
354
358
|
# # │ [7, 8, 9] ┆ 4 ┆ null │
|
355
359
|
# # └───────────────┴─────┴──────┘
|
356
|
-
def get(index)
|
360
|
+
def get(index, null_on_oob: true)
|
357
361
|
index = Utils.parse_as_expression(index)
|
358
|
-
Utils.wrap_expr(_rbexpr.arr_get(index))
|
362
|
+
Utils.wrap_expr(_rbexpr.arr_get(index, null_on_oob))
|
359
363
|
end
|
360
364
|
|
361
365
|
# Get the first value of the sub-arrays.
|
@@ -27,7 +27,8 @@ module Polars
|
|
27
27
|
row_count_offset: 0,
|
28
28
|
sample_size: 1024,
|
29
29
|
eol_char: "\n",
|
30
|
-
new_columns: nil
|
30
|
+
new_columns: nil,
|
31
|
+
truncate_ragged_lines: false
|
31
32
|
)
|
32
33
|
if Utils.pathlike?(file)
|
33
34
|
path = Utils.normalise_filepath(file)
|
@@ -75,7 +76,8 @@ module Polars
|
|
75
76
|
skip_rows_after_header,
|
76
77
|
Utils._prepare_row_count_args(row_count_name, row_count_offset),
|
77
78
|
sample_size,
|
78
|
-
eol_char
|
79
|
+
eol_char,
|
80
|
+
truncate_ragged_lines
|
79
81
|
)
|
80
82
|
self.new_columns = new_columns
|
81
83
|
end
|
data/lib/polars/data_frame.rb
CHANGED
@@ -91,7 +91,8 @@ module Polars
|
|
91
91
|
row_count_name: nil,
|
92
92
|
row_count_offset: 0,
|
93
93
|
sample_size: 1024,
|
94
|
-
eol_char: "\n"
|
94
|
+
eol_char: "\n",
|
95
|
+
truncate_ragged_lines: false
|
95
96
|
)
|
96
97
|
if Utils.pathlike?(file)
|
97
98
|
path = Utils.normalise_filepath(file)
|
@@ -147,7 +148,8 @@ module Polars
|
|
147
148
|
skip_rows_after_header: skip_rows_after_header,
|
148
149
|
row_count_name: row_count_name,
|
149
150
|
row_count_offset: row_count_offset,
|
150
|
-
eol_char: eol_char
|
151
|
+
eol_char: eol_char,
|
152
|
+
truncate_ragged_lines: truncate_ragged_lines
|
151
153
|
)
|
152
154
|
if columns.nil?
|
153
155
|
return _from_rbdf(scan.collect._df)
|
@@ -186,7 +188,8 @@ module Polars
|
|
186
188
|
skip_rows_after_header,
|
187
189
|
Utils._prepare_row_count_args(row_count_name, row_count_offset),
|
188
190
|
sample_size,
|
189
|
-
eol_char
|
191
|
+
eol_char,
|
192
|
+
truncate_ragged_lines
|
190
193
|
)
|
191
194
|
)
|
192
195
|
end
|
@@ -814,8 +817,6 @@ module Polars
|
|
814
817
|
|
815
818
|
# Serialize to JSON representation.
|
816
819
|
#
|
817
|
-
# @return [nil]
|
818
|
-
#
|
819
820
|
# @param file [String]
|
820
821
|
# File path to which the result should be written.
|
821
822
|
# @param pretty [Boolean]
|
@@ -823,17 +824,45 @@ module Polars
|
|
823
824
|
# @param row_oriented [Boolean]
|
824
825
|
# Write to row oriented json. This is slower, but more common.
|
825
826
|
#
|
826
|
-
# @
|
827
|
+
# @return [nil]
|
828
|
+
#
|
829
|
+
# @example
|
830
|
+
# df = Polars::DataFrame.new(
|
831
|
+
# {
|
832
|
+
# "foo" => [1, 2, 3],
|
833
|
+
# "bar" => [6, 7, 8]
|
834
|
+
# }
|
835
|
+
# )
|
836
|
+
# df.write_json
|
837
|
+
# # => "{\"columns\":[{\"name\":\"foo\",\"datatype\":\"Int64\",\"bit_settings\":\"\",\"values\":[1,2,3]},{\"name\":\"bar\",\"datatype\":\"Int64\",\"bit_settings\":\"\",\"values\":[6,7,8]}]}"
|
838
|
+
#
|
839
|
+
# @example
|
840
|
+
# df.write_json(row_oriented: true)
|
841
|
+
# # => "[{\"foo\":1,\"bar\":6},{\"foo\":2,\"bar\":7},{\"foo\":3,\"bar\":8}]"
|
827
842
|
def write_json(
|
828
|
-
file,
|
843
|
+
file = nil,
|
829
844
|
pretty: false,
|
830
845
|
row_oriented: false
|
831
846
|
)
|
832
847
|
if Utils.pathlike?(file)
|
833
848
|
file = Utils.normalise_filepath(file)
|
834
849
|
end
|
835
|
-
|
836
|
-
|
850
|
+
to_string_io = !file.nil? && file.is_a?(StringIO)
|
851
|
+
if file.nil? || to_string_io
|
852
|
+
buf = StringIO.new
|
853
|
+
buf.set_encoding(Encoding::BINARY)
|
854
|
+
_df.write_json(buf, pretty, row_oriented)
|
855
|
+
json_bytes = buf.string
|
856
|
+
|
857
|
+
json_str = json_bytes.force_encoding(Encoding::UTF_8)
|
858
|
+
if to_string_io
|
859
|
+
file.write(json_str)
|
860
|
+
else
|
861
|
+
return json_str
|
862
|
+
end
|
863
|
+
else
|
864
|
+
_df.write_json(file, pretty, row_oriented)
|
865
|
+
end
|
837
866
|
nil
|
838
867
|
end
|
839
868
|
|
@@ -843,12 +872,36 @@ module Polars
|
|
843
872
|
# File path to which the result should be written.
|
844
873
|
#
|
845
874
|
# @return [nil]
|
846
|
-
|
875
|
+
#
|
876
|
+
# @example
|
877
|
+
# df = Polars::DataFrame.new(
|
878
|
+
# {
|
879
|
+
# "foo" => [1, 2, 3],
|
880
|
+
# "bar" => [6, 7, 8]
|
881
|
+
# }
|
882
|
+
# )
|
883
|
+
# df.write_ndjson()
|
884
|
+
# # => "{\"foo\":1,\"bar\":6}\n{\"foo\":2,\"bar\":7}\n{\"foo\":3,\"bar\":8}\n"
|
885
|
+
def write_ndjson(file = nil)
|
847
886
|
if Utils.pathlike?(file)
|
848
887
|
file = Utils.normalise_filepath(file)
|
849
888
|
end
|
850
|
-
|
851
|
-
|
889
|
+
to_string_io = !file.nil? && file.is_a?(StringIO)
|
890
|
+
if file.nil? || to_string_io
|
891
|
+
buf = StringIO.new
|
892
|
+
buf.set_encoding(Encoding::BINARY)
|
893
|
+
_df.write_ndjson(buf)
|
894
|
+
json_bytes = buf.string
|
895
|
+
|
896
|
+
json_str = json_bytes.force_encoding(Encoding::UTF_8)
|
897
|
+
if to_string_io
|
898
|
+
file.write(json_str)
|
899
|
+
else
|
900
|
+
return json_str
|
901
|
+
end
|
902
|
+
else
|
903
|
+
_df.write_ndjson(file)
|
904
|
+
end
|
852
905
|
nil
|
853
906
|
end
|
854
907
|
|
@@ -1010,7 +1063,7 @@ module Polars
|
|
1010
1063
|
|
1011
1064
|
# Write to Apache Parquet file.
|
1012
1065
|
#
|
1013
|
-
# @param file [String]
|
1066
|
+
# @param file [String, Pathname, StringIO]
|
1014
1067
|
# File path to which the file should be written.
|
1015
1068
|
# @param compression ["lz4", "uncompressed", "snappy", "gzip", "lzo", "brotli", "zstd"]
|
1016
1069
|
# Choose "zstd" for good compression performance.
|
@@ -1027,10 +1080,9 @@ module Polars
|
|
1027
1080
|
# @param statistics [Boolean]
|
1028
1081
|
# Write statistics to the parquet headers. This requires extra compute.
|
1029
1082
|
# @param row_group_size [Integer, nil]
|
1030
|
-
# Size of the row groups in number of rows.
|
1031
|
-
#
|
1032
|
-
#
|
1033
|
-
# writing speeds.
|
1083
|
+
# Size of the row groups in number of rows. Defaults to 512^2 rows.
|
1084
|
+
# @param data_page_size [Integer, nil]
|
1085
|
+
# Size of the data page in bytes. Defaults to 1024^2 bytes.
|
1034
1086
|
#
|
1035
1087
|
# @return [nil]
|
1036
1088
|
def write_parquet(
|
@@ -1038,7 +1090,8 @@ module Polars
|
|
1038
1090
|
compression: "zstd",
|
1039
1091
|
compression_level: nil,
|
1040
1092
|
statistics: false,
|
1041
|
-
row_group_size: nil
|
1093
|
+
row_group_size: nil,
|
1094
|
+
data_page_size: nil
|
1042
1095
|
)
|
1043
1096
|
if compression.nil?
|
1044
1097
|
compression = "uncompressed"
|
@@ -1048,7 +1101,7 @@ module Polars
|
|
1048
1101
|
end
|
1049
1102
|
|
1050
1103
|
_df.write_parquet(
|
1051
|
-
file, compression, compression_level, statistics, row_group_size
|
1104
|
+
file, compression, compression_level, statistics, row_group_size, data_page_size
|
1052
1105
|
)
|
1053
1106
|
end
|
1054
1107
|
|
@@ -1084,7 +1137,7 @@ module Polars
|
|
1084
1137
|
# df.estimated_size
|
1085
1138
|
# # => 25888898
|
1086
1139
|
# df.estimated_size("mb")
|
1087
|
-
# # =>
|
1140
|
+
# # => 17.0601749420166
|
1088
1141
|
def estimated_size(unit = "b")
|
1089
1142
|
sz = _df.estimated_size
|
1090
1143
|
Utils.scale_bytes(sz, to: unit)
|
@@ -2161,12 +2214,13 @@ module Polars
|
|
2161
2214
|
# closed: "right"
|
2162
2215
|
# ).agg(Polars.col("A").alias("A_agg_list"))
|
2163
2216
|
# # =>
|
2164
|
-
# # shape: (
|
2217
|
+
# # shape: (4, 4)
|
2165
2218
|
# # ┌─────────────────┬─────────────────┬─────┬─────────────────┐
|
2166
2219
|
# # │ _lower_boundary ┆ _upper_boundary ┆ idx ┆ A_agg_list │
|
2167
2220
|
# # │ --- ┆ --- ┆ --- ┆ --- │
|
2168
2221
|
# # │ i64 ┆ i64 ┆ i64 ┆ list[str] │
|
2169
2222
|
# # ╞═════════════════╪═════════════════╪═════╪═════════════════╡
|
2223
|
+
# # │ -2 ┆ 1 ┆ -2 ┆ ["A", "A"] │
|
2170
2224
|
# # │ 0 ┆ 3 ┆ 0 ┆ ["A", "B", "B"] │
|
2171
2225
|
# # │ 2 ┆ 5 ┆ 2 ┆ ["B", "B", "C"] │
|
2172
2226
|
# # │ 4 ┆ 7 ┆ 4 ┆ ["C"] │
|
@@ -2621,26 +2675,26 @@ module Polars
|
|
2621
2675
|
# # ┌─────┬─────┬───────────┐
|
2622
2676
|
# # │ a ┆ b ┆ b_squared │
|
2623
2677
|
# # │ --- ┆ --- ┆ --- │
|
2624
|
-
# # │ i64 ┆ i64 ┆
|
2678
|
+
# # │ i64 ┆ i64 ┆ i64 │
|
2625
2679
|
# # ╞═════╪═════╪═══════════╡
|
2626
|
-
# # │ 1 ┆ 2 ┆ 4
|
2627
|
-
# # │ 3 ┆ 4 ┆ 16
|
2628
|
-
# # │ 5 ┆ 6 ┆ 36
|
2680
|
+
# # │ 1 ┆ 2 ┆ 4 │
|
2681
|
+
# # │ 3 ┆ 4 ┆ 16 │
|
2682
|
+
# # │ 5 ┆ 6 ┆ 36 │
|
2629
2683
|
# # └─────┴─────┴───────────┘
|
2630
2684
|
#
|
2631
2685
|
# @example Replaced
|
2632
2686
|
# df.with_column(Polars.col("a") ** 2)
|
2633
2687
|
# # =>
|
2634
2688
|
# # shape: (3, 2)
|
2635
|
-
# #
|
2636
|
-
# # │ a
|
2637
|
-
# # │ ---
|
2638
|
-
# # │
|
2639
|
-
# #
|
2640
|
-
# # │ 1
|
2641
|
-
# # │ 9
|
2642
|
-
# # │ 25
|
2643
|
-
# #
|
2689
|
+
# # ┌─────┬─────┐
|
2690
|
+
# # │ a ┆ b │
|
2691
|
+
# # │ --- ┆ --- │
|
2692
|
+
# # │ i64 ┆ i64 │
|
2693
|
+
# # ╞═════╪═════╡
|
2694
|
+
# # │ 1 ┆ 2 │
|
2695
|
+
# # │ 9 ┆ 4 │
|
2696
|
+
# # │ 25 ┆ 6 │
|
2697
|
+
# # └─────┴─────┘
|
2644
2698
|
def with_column(column)
|
2645
2699
|
lazy
|
2646
2700
|
.with_column(column)
|
@@ -2807,16 +2861,36 @@ module Polars
|
|
2807
2861
|
# # │ 2 ┆ 7.0 │
|
2808
2862
|
# # │ 3 ┆ 8.0 │
|
2809
2863
|
# # └─────┴─────┘
|
2810
|
-
|
2811
|
-
|
2812
|
-
|
2813
|
-
|
2814
|
-
|
2815
|
-
|
2816
|
-
|
2817
|
-
|
2818
|
-
|
2819
|
-
|
2864
|
+
#
|
2865
|
+
# @example Drop multiple columns by passing a list of column names.
|
2866
|
+
# df.drop(["bar", "ham"])
|
2867
|
+
# # =>
|
2868
|
+
# # shape: (3, 1)
|
2869
|
+
# # ┌─────┐
|
2870
|
+
# # │ foo │
|
2871
|
+
# # │ --- │
|
2872
|
+
# # │ i64 │
|
2873
|
+
# # ╞═════╡
|
2874
|
+
# # │ 1 │
|
2875
|
+
# # │ 2 │
|
2876
|
+
# # │ 3 │
|
2877
|
+
# # └─────┘
|
2878
|
+
#
|
2879
|
+
# @example Use positional arguments to drop multiple columns.
|
2880
|
+
# df.drop("foo", "ham")
|
2881
|
+
# # =>
|
2882
|
+
# # shape: (3, 1)
|
2883
|
+
# # ┌─────┐
|
2884
|
+
# # │ bar │
|
2885
|
+
# # │ --- │
|
2886
|
+
# # │ f64 │
|
2887
|
+
# # ╞═════╡
|
2888
|
+
# # │ 6.0 │
|
2889
|
+
# # │ 7.0 │
|
2890
|
+
# # │ 8.0 │
|
2891
|
+
# # └─────┘
|
2892
|
+
def drop(*columns)
|
2893
|
+
lazy.drop(*columns).collect(_eager: true)
|
2820
2894
|
end
|
2821
2895
|
|
2822
2896
|
# Drop in place.
|
@@ -3735,16 +3809,16 @@ module Polars
|
|
3735
3809
|
# df.with_columns((Polars.col("a") ** 2).alias("a^2"))
|
3736
3810
|
# # =>
|
3737
3811
|
# # shape: (4, 4)
|
3738
|
-
# #
|
3739
|
-
# # │ a ┆ b ┆ c ┆ a^2
|
3740
|
-
# # │ --- ┆ --- ┆ --- ┆ ---
|
3741
|
-
# # │ i64 ┆ f64 ┆ bool ┆
|
3742
|
-
# #
|
3743
|
-
# # │ 1 ┆ 0.5 ┆ true ┆ 1
|
3744
|
-
# # │ 2 ┆ 4.0 ┆ true ┆ 4
|
3745
|
-
# # │ 3 ┆ 10.0 ┆ false ┆ 9
|
3746
|
-
# # │ 4 ┆ 13.0 ┆ true ┆ 16
|
3747
|
-
# #
|
3812
|
+
# # ┌─────┬──────┬───────┬─────┐
|
3813
|
+
# # │ a ┆ b ┆ c ┆ a^2 │
|
3814
|
+
# # │ --- ┆ --- ┆ --- ┆ --- │
|
3815
|
+
# # │ i64 ┆ f64 ┆ bool ┆ i64 │
|
3816
|
+
# # ╞═════╪══════╪═══════╪═════╡
|
3817
|
+
# # │ 1 ┆ 0.5 ┆ true ┆ 1 │
|
3818
|
+
# # │ 2 ┆ 4.0 ┆ true ┆ 4 │
|
3819
|
+
# # │ 3 ┆ 10.0 ┆ false ┆ 9 │
|
3820
|
+
# # │ 4 ┆ 13.0 ┆ true ┆ 16 │
|
3821
|
+
# # └─────┴──────┴───────┴─────┘
|
3748
3822
|
#
|
3749
3823
|
# @example Added columns will replace existing columns with the same name.
|
3750
3824
|
# df.with_columns(Polars.col("a").cast(Polars::Float64))
|
@@ -3771,16 +3845,16 @@ module Polars
|
|
3771
3845
|
# )
|
3772
3846
|
# # =>
|
3773
3847
|
# # shape: (4, 6)
|
3774
|
-
# #
|
3775
|
-
# # │ a ┆ b ┆ c ┆ a^2
|
3776
|
-
# # │ --- ┆ --- ┆ --- ┆ ---
|
3777
|
-
# # │ i64 ┆ f64 ┆ bool ┆
|
3778
|
-
# #
|
3779
|
-
# # │ 1 ┆ 0.5 ┆ true ┆ 1
|
3780
|
-
# # │ 2 ┆ 4.0 ┆ true ┆ 4
|
3781
|
-
# # │ 3 ┆ 10.0 ┆ false ┆ 9
|
3782
|
-
# # │ 4 ┆ 13.0 ┆ true ┆ 16
|
3783
|
-
# #
|
3848
|
+
# # ┌─────┬──────┬───────┬─────┬──────┬───────┐
|
3849
|
+
# # │ a ┆ b ┆ c ┆ a^2 ┆ b/2 ┆ not c │
|
3850
|
+
# # │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
|
3851
|
+
# # │ i64 ┆ f64 ┆ bool ┆ i64 ┆ f64 ┆ bool │
|
3852
|
+
# # ╞═════╪══════╪═══════╪═════╪══════╪═══════╡
|
3853
|
+
# # │ 1 ┆ 0.5 ┆ true ┆ 1 ┆ 0.25 ┆ false │
|
3854
|
+
# # │ 2 ┆ 4.0 ┆ true ┆ 4 ┆ 2.0 ┆ false │
|
3855
|
+
# # │ 3 ┆ 10.0 ┆ false ┆ 9 ┆ 5.0 ┆ true │
|
3856
|
+
# # │ 4 ┆ 13.0 ┆ true ┆ 16 ┆ 6.5 ┆ false │
|
3857
|
+
# # └─────┴──────┴───────┴─────┴──────┴───────┘
|
3784
3858
|
#
|
3785
3859
|
# @example Multiple columns also can be added using positional arguments instead of a list.
|
3786
3860
|
# df.with_columns(
|
@@ -3790,16 +3864,16 @@ module Polars
|
|
3790
3864
|
# )
|
3791
3865
|
# # =>
|
3792
3866
|
# # shape: (4, 6)
|
3793
|
-
# #
|
3794
|
-
# # │ a ┆ b ┆ c ┆ a^2
|
3795
|
-
# # │ --- ┆ --- ┆ --- ┆ ---
|
3796
|
-
# # │ i64 ┆ f64 ┆ bool ┆
|
3797
|
-
# #
|
3798
|
-
# # │ 1 ┆ 0.5 ┆ true ┆ 1
|
3799
|
-
# # │ 2 ┆ 4.0 ┆ true ┆ 4
|
3800
|
-
# # │ 3 ┆ 10.0 ┆ false ┆ 9
|
3801
|
-
# # │ 4 ┆ 13.0 ┆ true ┆ 16
|
3802
|
-
# #
|
3867
|
+
# # ┌─────┬──────┬───────┬─────┬──────┬───────┐
|
3868
|
+
# # │ a ┆ b ┆ c ┆ a^2 ┆ b/2 ┆ not c │
|
3869
|
+
# # │ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
|
3870
|
+
# # │ i64 ┆ f64 ┆ bool ┆ i64 ┆ f64 ┆ bool │
|
3871
|
+
# # ╞═════╪══════╪═══════╪═════╪══════╪═══════╡
|
3872
|
+
# # │ 1 ┆ 0.5 ┆ true ┆ 1 ┆ 0.25 ┆ false │
|
3873
|
+
# # │ 2 ┆ 4.0 ┆ true ┆ 4 ┆ 2.0 ┆ false │
|
3874
|
+
# # │ 3 ┆ 10.0 ┆ false ┆ 9 ┆ 5.0 ┆ true │
|
3875
|
+
# # │ 4 ┆ 13.0 ┆ true ┆ 16 ┆ 6.5 ┆ false │
|
3876
|
+
# # └─────┴──────┴───────┴─────┴──────┴───────┘
|
3803
3877
|
#
|
3804
3878
|
# @example Use keyword arguments to easily name your expression inputs.
|
3805
3879
|
# df.with_columns(
|
@@ -1027,14 +1027,20 @@ module Polars
|
|
1027
1027
|
# Different from `convert_time_zone`, this will also modify
|
1028
1028
|
# the underlying timestamp,
|
1029
1029
|
#
|
1030
|
-
# @param
|
1031
|
-
#
|
1030
|
+
# @param time_zone [String]
|
1031
|
+
# Time zone for the `Datetime` Series. Pass `nil` to unset time zone.
|
1032
|
+
# @param use_earliest [Boolean]
|
1033
|
+
# Determine how to deal with ambiguous datetimes.
|
1034
|
+
# @param ambiguous [String]
|
1035
|
+
# Determine how to deal with ambiguous datetimes.
|
1036
|
+
# @param non_existent [String]
|
1037
|
+
# Determine how to deal with non-existent datetimes.
|
1032
1038
|
#
|
1033
1039
|
# @return [Expr]
|
1034
|
-
def replace_time_zone(
|
1040
|
+
def replace_time_zone(time_zone, use_earliest: nil, ambiguous: "raise", non_existent: "raise")
|
1035
1041
|
ambiguous = Utils.rename_use_earliest_to_ambiguous(use_earliest, ambiguous)
|
1036
1042
|
ambiguous = Polars.lit(ambiguous) unless ambiguous.is_a?(Expr)
|
1037
|
-
Utils.wrap_expr(_rbexpr.dt_replace_time_zone(
|
1043
|
+
Utils.wrap_expr(_rbexpr.dt_replace_time_zone(time_zone, ambiguous._rbexpr, non_existent))
|
1038
1044
|
end
|
1039
1045
|
|
1040
1046
|
# Extract the days from a Duration type.
|
@@ -910,8 +910,14 @@ module Polars
|
|
910
910
|
# Different from `with_time_zone`, this will also modify
|
911
911
|
# the underlying timestamp.
|
912
912
|
#
|
913
|
-
# @param
|
914
|
-
#
|
913
|
+
# @param time_zone [String]
|
914
|
+
# Time zone for the `Datetime` Series. Pass `nil` to unset time zone.
|
915
|
+
# @param use_earliest [Boolean]
|
916
|
+
# Determine how to deal with ambiguous datetimes.
|
917
|
+
# @param ambiguous [String]
|
918
|
+
# Determine how to deal with ambiguous datetimes.
|
919
|
+
# @param non_existent [String]
|
920
|
+
# Determine how to deal with non-existent datetimes.
|
915
921
|
#
|
916
922
|
# @return [Series]
|
917
923
|
#
|
@@ -982,7 +988,7 @@ module Polars
|
|
982
988
|
# # 1585717200
|
983
989
|
# # 1588309200
|
984
990
|
# # ]
|
985
|
-
def replace_time_zone(
|
991
|
+
def replace_time_zone(time_zone, use_earliest: nil, ambiguous: "raise", non_existent: "raise")
|
986
992
|
super
|
987
993
|
end
|
988
994
|
|
data/lib/polars/expr.rb
CHANGED
@@ -1544,16 +1544,14 @@ module Polars
|
|
1544
1544
|
# # │ one │
|
1545
1545
|
# # │ two │
|
1546
1546
|
# # └───────┘
|
1547
|
-
def sort_by(by, reverse: false)
|
1548
|
-
|
1549
|
-
by = [by]
|
1550
|
-
end
|
1547
|
+
def sort_by(by, *more_by, reverse: false, nulls_last: false, multithreaded: true, maintain_order: false)
|
1548
|
+
by = Utils.parse_as_list_of_expressions(by, *more_by)
|
1551
1549
|
if !reverse.is_a?(::Array)
|
1552
1550
|
reverse = [reverse]
|
1551
|
+
elsif by.length != reverse.length
|
1552
|
+
raise ArgumentError, "the length of `reverse` (#{reverse.length}) does not match the length of `by` (#{by.length})"
|
1553
1553
|
end
|
1554
|
-
by
|
1555
|
-
|
1556
|
-
_from_rbexpr(_rbexpr.sort_by(by, reverse))
|
1554
|
+
_from_rbexpr(_rbexpr.sort_by(by, reverse, nulls_last, multithreaded, maintain_order))
|
1557
1555
|
end
|
1558
1556
|
|
1559
1557
|
# Take values by index.
|
@@ -3515,20 +3513,23 @@ module Polars
|
|
3515
3513
|
# @return [Expr]
|
3516
3514
|
#
|
3517
3515
|
# @example
|
3518
|
-
# df = Polars::DataFrame.new({"
|
3519
|
-
# df.
|
3516
|
+
# df = Polars::DataFrame.new({"x" => [1, 2, 4, 8]})
|
3517
|
+
# df.with_columns(
|
3518
|
+
# Polars.col("x").pow(3).alias("cube"),
|
3519
|
+
# Polars.col("x").pow(Polars.col("x").log(2)).alias("x ** xlog2")
|
3520
|
+
# )
|
3520
3521
|
# # =>
|
3521
|
-
# # shape: (4,
|
3522
|
-
# #
|
3523
|
-
# # │
|
3524
|
-
# # │ --- │
|
3525
|
-
# # │ f64
|
3526
|
-
# #
|
3527
|
-
# # │ 1.0
|
3528
|
-
# # │ 8.0
|
3529
|
-
# # │
|
3530
|
-
# # │
|
3531
|
-
# #
|
3522
|
+
# # shape: (4, 3)
|
3523
|
+
# # ┌─────┬──────┬────────────┐
|
3524
|
+
# # │ x ┆ cube ┆ x ** xlog2 │
|
3525
|
+
# # │ --- ┆ --- ┆ --- │
|
3526
|
+
# # │ i64 ┆ i64 ┆ f64 │
|
3527
|
+
# # ╞═════╪══════╪════════════╡
|
3528
|
+
# # │ 1 ┆ 1 ┆ 1.0 │
|
3529
|
+
# # │ 2 ┆ 8 ┆ 2.0 │
|
3530
|
+
# # │ 4 ┆ 64 ┆ 16.0 │
|
3531
|
+
# # │ 8 ┆ 512 ┆ 512.0 │
|
3532
|
+
# # └─────┴──────┴────────────┘
|
3532
3533
|
def pow(exponent)
|
3533
3534
|
self**exponent
|
3534
3535
|
end
|
@@ -3933,7 +3934,7 @@ module Polars
|
|
3933
3934
|
min_periods: nil,
|
3934
3935
|
center: false,
|
3935
3936
|
by: nil,
|
3936
|
-
closed:
|
3937
|
+
closed: nil
|
3937
3938
|
)
|
3938
3939
|
window_size, min_periods = _prepare_rolling_window_args(
|
3939
3940
|
window_size, min_periods
|
@@ -4022,7 +4023,7 @@ module Polars
|
|
4022
4023
|
min_periods: nil,
|
4023
4024
|
center: false,
|
4024
4025
|
by: nil,
|
4025
|
-
closed:
|
4026
|
+
closed: nil
|
4026
4027
|
)
|
4027
4028
|
window_size, min_periods = _prepare_rolling_window_args(
|
4028
4029
|
window_size, min_periods
|
@@ -4111,7 +4112,7 @@ module Polars
|
|
4111
4112
|
min_periods: nil,
|
4112
4113
|
center: false,
|
4113
4114
|
by: nil,
|
4114
|
-
closed:
|
4115
|
+
closed: nil
|
4115
4116
|
)
|
4116
4117
|
window_size, min_periods = _prepare_rolling_window_args(
|
4117
4118
|
window_size, min_periods
|
@@ -4200,7 +4201,7 @@ module Polars
|
|
4200
4201
|
min_periods: nil,
|
4201
4202
|
center: false,
|
4202
4203
|
by: nil,
|
4203
|
-
closed:
|
4204
|
+
closed: nil
|
4204
4205
|
)
|
4205
4206
|
window_size, min_periods = _prepare_rolling_window_args(
|
4206
4207
|
window_size, min_periods
|
@@ -4289,7 +4290,7 @@ module Polars
|
|
4289
4290
|
min_periods: nil,
|
4290
4291
|
center: false,
|
4291
4292
|
by: nil,
|
4292
|
-
closed:
|
4293
|
+
closed: nil,
|
4293
4294
|
ddof: 1,
|
4294
4295
|
warn_if_unsorted: true
|
4295
4296
|
)
|
@@ -4380,7 +4381,7 @@ module Polars
|
|
4380
4381
|
min_periods: nil,
|
4381
4382
|
center: false,
|
4382
4383
|
by: nil,
|
4383
|
-
closed:
|
4384
|
+
closed: nil,
|
4384
4385
|
ddof: 1,
|
4385
4386
|
warn_if_unsorted: true
|
4386
4387
|
)
|
@@ -4467,7 +4468,7 @@ module Polars
|
|
4467
4468
|
min_periods: nil,
|
4468
4469
|
center: false,
|
4469
4470
|
by: nil,
|
4470
|
-
closed:
|
4471
|
+
closed: nil,
|
4471
4472
|
warn_if_unsorted: true
|
4472
4473
|
)
|
4473
4474
|
window_size, min_periods = _prepare_rolling_window_args(
|
@@ -4559,7 +4560,7 @@ module Polars
|
|
4559
4560
|
min_periods: nil,
|
4560
4561
|
center: false,
|
4561
4562
|
by: nil,
|
4562
|
-
closed:
|
4563
|
+
closed: nil,
|
4563
4564
|
warn_if_unsorted: true
|
4564
4565
|
)
|
4565
4566
|
window_size, min_periods = _prepare_rolling_window_args(
|
@@ -4730,6 +4731,8 @@ module Polars
|
|
4730
4731
|
# on the order that the values occur in the Series.
|
4731
4732
|
# @param reverse [Boolean]
|
4732
4733
|
# Reverse the operation.
|
4734
|
+
# @param seed [Integer]
|
4735
|
+
# If `method: "random"`, use this as seed.
|
4733
4736
|
#
|
4734
4737
|
# @return [Expr]
|
4735
4738
|
#
|
@@ -5711,13 +5714,13 @@ module Polars
|
|
5711
5714
|
# # ┌────────┐
|
5712
5715
|
# # │ values │
|
5713
5716
|
# # │ --- │
|
5714
|
-
# # │
|
5717
|
+
# # │ i64 │
|
5715
5718
|
# # ╞════════╡
|
5716
|
-
# # │ 0
|
5717
|
-
# # │ -3
|
5718
|
-
# # │ -8
|
5719
|
-
# # │ -15
|
5720
|
-
# # │ -24
|
5719
|
+
# # │ 0 │
|
5720
|
+
# # │ -3 │
|
5721
|
+
# # │ -8 │
|
5722
|
+
# # │ -15 │
|
5723
|
+
# # │ -24 │
|
5721
5724
|
# # └────────┘
|
5722
5725
|
def cumulative_eval(expr, min_periods: 1, parallel: false)
|
5723
5726
|
_from_rbexpr(
|
@@ -1264,10 +1264,10 @@ module Polars
|
|
1264
1264
|
# # ┌─────┬─────┬───────┐
|
1265
1265
|
# # │ a ┆ a_a ┆ a_txt │
|
1266
1266
|
# # │ --- ┆ --- ┆ --- │
|
1267
|
-
# # │ i64 ┆
|
1267
|
+
# # │ i64 ┆ i64 ┆ str │
|
1268
1268
|
# # ╞═════╪═════╪═══════╡
|
1269
|
-
# # │ 2 ┆ 4
|
1270
|
-
# # │ 1 ┆ 1
|
1269
|
+
# # │ 2 ┆ 4 ┆ 2 │
|
1270
|
+
# # │ 1 ┆ 1 ┆ 1 │
|
1271
1271
|
# # └─────┴─────┴───────┘
|
1272
1272
|
def sql_expr(sql)
|
1273
1273
|
if sql.is_a?(::String)
|