polars-df 0.13.0-x64-mingw-ucrt
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 +7 -0
- data/.yardopts +3 -0
- data/CHANGELOG.md +208 -0
- data/Cargo.lock +2556 -0
- data/Cargo.toml +6 -0
- data/LICENSE-THIRD-PARTY.txt +39278 -0
- data/LICENSE.txt +20 -0
- data/README.md +437 -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 +537 -0
- data/lib/polars/array_name_space.rb +423 -0
- data/lib/polars/batched_csv_reader.rb +104 -0
- data/lib/polars/binary_expr.rb +77 -0
- data/lib/polars/binary_name_space.rb +66 -0
- data/lib/polars/cat_expr.rb +36 -0
- data/lib/polars/cat_name_space.rb +88 -0
- data/lib/polars/config.rb +530 -0
- data/lib/polars/convert.rb +98 -0
- data/lib/polars/data_frame.rb +5191 -0
- data/lib/polars/data_types.rb +466 -0
- data/lib/polars/date_time_expr.rb +1397 -0
- data/lib/polars/date_time_name_space.rb +1287 -0
- data/lib/polars/dynamic_group_by.rb +52 -0
- data/lib/polars/exceptions.rb +38 -0
- data/lib/polars/expr.rb +7256 -0
- data/lib/polars/expr_dispatch.rb +22 -0
- data/lib/polars/functions/aggregation/horizontal.rb +246 -0
- data/lib/polars/functions/aggregation/vertical.rb +282 -0
- data/lib/polars/functions/as_datatype.rb +271 -0
- data/lib/polars/functions/col.rb +47 -0
- data/lib/polars/functions/eager.rb +182 -0
- data/lib/polars/functions/lazy.rb +1329 -0
- data/lib/polars/functions/len.rb +49 -0
- data/lib/polars/functions/lit.rb +35 -0
- data/lib/polars/functions/random.rb +16 -0
- data/lib/polars/functions/range/date_range.rb +136 -0
- data/lib/polars/functions/range/datetime_range.rb +149 -0
- data/lib/polars/functions/range/int_range.rb +51 -0
- data/lib/polars/functions/range/time_range.rb +141 -0
- data/lib/polars/functions/repeat.rb +144 -0
- data/lib/polars/functions/whenthen.rb +96 -0
- data/lib/polars/functions.rb +57 -0
- data/lib/polars/group_by.rb +613 -0
- data/lib/polars/io/avro.rb +24 -0
- data/lib/polars/io/csv.rb +696 -0
- data/lib/polars/io/database.rb +73 -0
- data/lib/polars/io/ipc.rb +275 -0
- data/lib/polars/io/json.rb +29 -0
- data/lib/polars/io/ndjson.rb +80 -0
- data/lib/polars/io/parquet.rb +233 -0
- data/lib/polars/lazy_frame.rb +2708 -0
- data/lib/polars/lazy_group_by.rb +181 -0
- data/lib/polars/list_expr.rb +791 -0
- data/lib/polars/list_name_space.rb +449 -0
- data/lib/polars/meta_expr.rb +222 -0
- data/lib/polars/name_expr.rb +198 -0
- data/lib/polars/plot.rb +109 -0
- data/lib/polars/rolling_group_by.rb +35 -0
- data/lib/polars/series.rb +4444 -0
- data/lib/polars/slice.rb +104 -0
- data/lib/polars/sql_context.rb +194 -0
- data/lib/polars/string_cache.rb +75 -0
- data/lib/polars/string_expr.rb +1495 -0
- data/lib/polars/string_name_space.rb +811 -0
- data/lib/polars/struct_expr.rb +98 -0
- data/lib/polars/struct_name_space.rb +96 -0
- data/lib/polars/testing.rb +507 -0
- data/lib/polars/utils/constants.rb +9 -0
- data/lib/polars/utils/convert.rb +97 -0
- data/lib/polars/utils/parse.rb +89 -0
- data/lib/polars/utils/various.rb +76 -0
- data/lib/polars/utils/wrap.rb +19 -0
- data/lib/polars/utils.rb +130 -0
- data/lib/polars/version.rb +4 -0
- data/lib/polars/whenthen.rb +83 -0
- data/lib/polars-df.rb +1 -0
- data/lib/polars.rb +91 -0
- metadata +138 -0
@@ -0,0 +1,88 @@
|
|
1
|
+
module Polars
|
2
|
+
# Series.cat namespace.
|
3
|
+
class CatNameSpace
|
4
|
+
include ExprDispatch
|
5
|
+
|
6
|
+
self._accessor = "cat"
|
7
|
+
|
8
|
+
# @private
|
9
|
+
def initialize(series)
|
10
|
+
self._s = series._s
|
11
|
+
end
|
12
|
+
|
13
|
+
# Get the categories stored in this data type.
|
14
|
+
#
|
15
|
+
# @return [Series]
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
# s = Polars::Series.new(["foo", "bar", "foo", "foo", "ham"], dtype: Polars::Categorical)
|
19
|
+
# s.cat.get_categories
|
20
|
+
# # =>
|
21
|
+
# # shape: (3,)
|
22
|
+
# # Series: '' [str]
|
23
|
+
# # [
|
24
|
+
# # "foo"
|
25
|
+
# # "bar"
|
26
|
+
# # "ham"
|
27
|
+
# # ]
|
28
|
+
def get_categories
|
29
|
+
super
|
30
|
+
end
|
31
|
+
|
32
|
+
# Return whether or not the column is a local categorical.
|
33
|
+
#
|
34
|
+
# @return [Boolean]
|
35
|
+
#
|
36
|
+
# @example Categoricals constructed without a string cache are considered local.
|
37
|
+
# s = Polars::Series.new(["a", "b", "a"], dtype: Polars::Categorical)
|
38
|
+
# s.cat.is_local
|
39
|
+
# # => true
|
40
|
+
#
|
41
|
+
# @example Categoricals constructed with a string cache are considered global.
|
42
|
+
# s = nil
|
43
|
+
# Polars::StringCache.new do
|
44
|
+
# s = Polars::Series.new(["a", "b", "a"], dtype: Polars::Categorical)
|
45
|
+
# end
|
46
|
+
# s.cat.is_local
|
47
|
+
# # => false
|
48
|
+
def is_local
|
49
|
+
_s.cat_is_local
|
50
|
+
end
|
51
|
+
|
52
|
+
# Convert a categorical column to its local representation.
|
53
|
+
#
|
54
|
+
# This may change the underlying physical representation of the column.
|
55
|
+
#
|
56
|
+
# @return [Series]
|
57
|
+
#
|
58
|
+
# @example Compare the global and local representations of a categorical.
|
59
|
+
# s = nil
|
60
|
+
# Polars::StringCache.new do
|
61
|
+
# _ = Polars::Series.new("x", ["a", "b", "a"], dtype: Polars::Categorical)
|
62
|
+
# s = Polars::Series.new("y", ["c", "b", "d"], dtype: Polars::Categorical)
|
63
|
+
# end
|
64
|
+
# s.to_physical
|
65
|
+
# # =>
|
66
|
+
# # shape: (3,)
|
67
|
+
# # Series: 'y' [u32]
|
68
|
+
# # [
|
69
|
+
# # 2
|
70
|
+
# # 1
|
71
|
+
# # 3
|
72
|
+
# # ]
|
73
|
+
#
|
74
|
+
# @example
|
75
|
+
# s.cat.to_local.to_physical
|
76
|
+
# # =>
|
77
|
+
# # shape: (3,)
|
78
|
+
# # Series: 'y' [u32]
|
79
|
+
# # [
|
80
|
+
# # 0
|
81
|
+
# # 1
|
82
|
+
# # 2
|
83
|
+
# # ]
|
84
|
+
def to_local
|
85
|
+
Utils.wrap_s(_s.cat_to_local)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,530 @@
|
|
1
|
+
module Polars
|
2
|
+
# Configure polars; offers options for table formatting and more.
|
3
|
+
class Config
|
4
|
+
POLARS_CFG_ENV_VARS = [
|
5
|
+
"POLARS_ACTIVATE_DECIMAL",
|
6
|
+
"POLARS_AUTO_STRUCTIFY",
|
7
|
+
"POLARS_FMT_MAX_COLS",
|
8
|
+
"POLARS_FMT_MAX_ROWS",
|
9
|
+
"POLARS_FMT_STR_LEN",
|
10
|
+
"POLARS_FMT_TABLE_CELL_ALIGNMENT",
|
11
|
+
"POLARS_FMT_TABLE_DATAFRAME_SHAPE_BELOW",
|
12
|
+
"POLARS_FMT_TABLE_FORMATTING",
|
13
|
+
"POLARS_FMT_TABLE_HIDE_COLUMN_DATA_TYPES",
|
14
|
+
"POLARS_FMT_TABLE_HIDE_COLUMN_NAMES",
|
15
|
+
"POLARS_FMT_TABLE_HIDE_COLUMN_SEPARATOR",
|
16
|
+
"POLARS_FMT_TABLE_HIDE_DATAFRAME_SHAPE_INFORMATION",
|
17
|
+
"POLARS_FMT_TABLE_INLINE_COLUMN_DATA_TYPE",
|
18
|
+
"POLARS_FMT_TABLE_ROUNDED_CORNERS",
|
19
|
+
"POLARS_STREAMING_CHUNK_SIZE",
|
20
|
+
"POLARS_TABLE_WIDTH",
|
21
|
+
"POLARS_VERBOSE"
|
22
|
+
]
|
23
|
+
|
24
|
+
POLARS_CFG_DIRECT_VARS = {"set_fmt_float" => Plr.method(:get_float_fmt)}
|
25
|
+
|
26
|
+
# Initialize a Config object instance for context manager usage.
|
27
|
+
def initialize(restore_defaults: false, **options)
|
28
|
+
@original_state = self.class.save
|
29
|
+
|
30
|
+
if restore_defaults
|
31
|
+
self.class.restore_defaults
|
32
|
+
end
|
33
|
+
|
34
|
+
options.each do |opt, value|
|
35
|
+
opt = "set_#{opt}" unless opt.to_s.start_with?("set_")
|
36
|
+
if !self.class.respond_to?(opt)
|
37
|
+
raise ArgumentError, "Config has no #{opt} option"
|
38
|
+
end
|
39
|
+
self.class.public_send(opt, value)
|
40
|
+
end
|
41
|
+
|
42
|
+
yield self.class
|
43
|
+
|
44
|
+
self.class.restore_defaults.load(@original_state)
|
45
|
+
@original_state = ""
|
46
|
+
end
|
47
|
+
|
48
|
+
# Load and set previously saved (or shared) Config options from json/file.
|
49
|
+
#
|
50
|
+
# @return [Config]
|
51
|
+
def self.load(cfg)
|
52
|
+
options = JSON.parse(cfg)
|
53
|
+
ENV.merge!(options["environment"])
|
54
|
+
options.fetch("fetch", {}).each do |cfg_methodname, value|
|
55
|
+
if POLARS_CFG_DIRECT_VARS.key?(cfg_methodname)
|
56
|
+
public_send(cfg_methodname, value)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
self
|
60
|
+
end
|
61
|
+
|
62
|
+
# Reset all polars Config settings to their default state.
|
63
|
+
#
|
64
|
+
# @return [Config]
|
65
|
+
def self.restore_defaults
|
66
|
+
POLARS_CFG_ENV_VARS.each do |var|
|
67
|
+
ENV.delete(var)
|
68
|
+
end
|
69
|
+
set_fmt_float
|
70
|
+
self
|
71
|
+
end
|
72
|
+
|
73
|
+
# Save the current set of Config options as a json string or file.
|
74
|
+
#
|
75
|
+
# @return [Config]
|
76
|
+
def self.save
|
77
|
+
environment_vars = POLARS_CFG_ENV_VARS.sort.select { |k| ENV.key?(k) }.to_h { |k| [k, ENV[k]] }
|
78
|
+
direct_vars = POLARS_CFG_DIRECT_VARS.to_h { |cfg_methodname, get_value| [cfg_methodname, get_value.call] }
|
79
|
+
options = JSON.generate({environment: environment_vars, direct: direct_vars})
|
80
|
+
options
|
81
|
+
end
|
82
|
+
|
83
|
+
# Show the current state of all Config variables as a dict.
|
84
|
+
#
|
85
|
+
# @param if_set [Boolean]
|
86
|
+
# by default this will show the state of all `Config` environment variables.
|
87
|
+
# change this to `true` to restrict the returned dictionary to include only
|
88
|
+
# those that have been set to a specific value.
|
89
|
+
# @param env_only [Boolean]
|
90
|
+
# include only Config environment variables in the output; some options (such
|
91
|
+
# as "set_fmt_float") are set directly, not via an environment variable.
|
92
|
+
#
|
93
|
+
# @return [Object]
|
94
|
+
def self.state(if_set: false, env_only: false)
|
95
|
+
config_state = POLARS_CFG_ENV_VARS.sort
|
96
|
+
.select { |var| !if_set || !ENV[var].nil? }
|
97
|
+
.to_h { |var| [var, ENV[var]] }
|
98
|
+
if !env_only
|
99
|
+
POLARS_CFG_DIRECT_VARS.each do |cfg_methodname, get_value|
|
100
|
+
config_state[cfg_methodname] = get_value.call
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
config_state
|
105
|
+
end
|
106
|
+
|
107
|
+
# Activate `Decimal` data types.
|
108
|
+
#
|
109
|
+
# This is a temporary setting that will be removed later once the
|
110
|
+
# `Decimal` type stabilize. This will happens without it being
|
111
|
+
# considered a breaking change.
|
112
|
+
#
|
113
|
+
# Currently, `Decimal` types are in an alpha state.
|
114
|
+
#
|
115
|
+
# @return [Config]
|
116
|
+
def self.activate_decimals(active = true)
|
117
|
+
if !active
|
118
|
+
ENV.delete("POLARS_ACTIVATE_DECIMAL")
|
119
|
+
else
|
120
|
+
ENV["POLARS_ACTIVATE_DECIMAL"] = "1"
|
121
|
+
end
|
122
|
+
self
|
123
|
+
end
|
124
|
+
|
125
|
+
# Use ASCII characters to display table outlines (set False to revert to UTF8).
|
126
|
+
#
|
127
|
+
# @return [Config]
|
128
|
+
#
|
129
|
+
# @example
|
130
|
+
# df = Polars::DataFrame.new({"abc" => [1.0, 2.5, 5.0], "xyz" => [true, false, true]})
|
131
|
+
# Polars::Config.new(ascii_tables: true) do
|
132
|
+
# p df
|
133
|
+
# end
|
134
|
+
# # =>
|
135
|
+
# # shape: (3, 2)
|
136
|
+
# # +-----+-------+
|
137
|
+
# # | abc | xyz |
|
138
|
+
# # | --- | --- |
|
139
|
+
# # | f64 | bool |
|
140
|
+
# # +=============+
|
141
|
+
# # | 1.0 | true |
|
142
|
+
# # | 2.5 | false |
|
143
|
+
# # | 5.0 | true |
|
144
|
+
# # +-----+-------+
|
145
|
+
def self.set_ascii_tables(active = true)
|
146
|
+
fmt = active ? "ASCII_FULL_CONDENSED" : "UTF8_FULL_CONDENSED"
|
147
|
+
ENV["POLARS_FMT_TABLE_FORMATTING"] = fmt
|
148
|
+
self
|
149
|
+
end
|
150
|
+
|
151
|
+
# Allow multi-output expressions to be automatically turned into Structs.
|
152
|
+
#
|
153
|
+
# @return [Config]
|
154
|
+
def self.set_auto_structify(active = true)
|
155
|
+
ENV["POLARS_AUTO_STRUCTIFY"] = active ? "1" : "0"
|
156
|
+
self
|
157
|
+
end
|
158
|
+
|
159
|
+
# Control how floating point values are displayed.
|
160
|
+
#
|
161
|
+
# @param fmt ["mixed", "full"]
|
162
|
+
# How to format floating point numbers
|
163
|
+
#
|
164
|
+
# @return [Config]
|
165
|
+
def self.set_fmt_float(fmt = "mixed")
|
166
|
+
Plr.set_float_fmt(fmt)
|
167
|
+
self
|
168
|
+
end
|
169
|
+
|
170
|
+
# Set the number of characters used to display string values.
|
171
|
+
#
|
172
|
+
# @param n [Integer]
|
173
|
+
# number of characters to display
|
174
|
+
#
|
175
|
+
# @return [Config]
|
176
|
+
#
|
177
|
+
# @example
|
178
|
+
# df = Polars::DataFrame.new(
|
179
|
+
# {
|
180
|
+
# "txt" => [
|
181
|
+
# "Play it, Sam. Play 'As Time Goes By'.",
|
182
|
+
# "This is the beginning of a beautiful friendship.",
|
183
|
+
# ]
|
184
|
+
# }
|
185
|
+
# )
|
186
|
+
# Polars::Config.new(fmt_str_lengths: 50) do
|
187
|
+
# p df
|
188
|
+
# end
|
189
|
+
# # =>
|
190
|
+
# # shape: (2, 1)
|
191
|
+
# # ┌──────────────────────────────────────────────────┐
|
192
|
+
# # │ txt │
|
193
|
+
# # │ --- │
|
194
|
+
# # │ str │
|
195
|
+
# # ╞══════════════════════════════════════════════════╡
|
196
|
+
# # │ Play it, Sam. Play 'As Time Goes By'. │
|
197
|
+
# # │ This is the beginning of a beautiful friendship. │
|
198
|
+
# # └──────────────────────────────────────────────────┘
|
199
|
+
def self.set_fmt_str_lengths(n)
|
200
|
+
if n <= 0
|
201
|
+
raise ArgumentError, "number of characters must be > 0"
|
202
|
+
end
|
203
|
+
|
204
|
+
ENV["POLARS_FMT_STR_LEN"] = n.to_s
|
205
|
+
self
|
206
|
+
end
|
207
|
+
|
208
|
+
# Overwrite chunk size used in `streaming` engine.
|
209
|
+
#
|
210
|
+
# By default, the chunk size is determined by the schema
|
211
|
+
# and size of the thread pool. For some datasets (esp.
|
212
|
+
# when you have large string elements) this can be too
|
213
|
+
# optimistic and lead to Out of Memory errors.
|
214
|
+
#
|
215
|
+
# @param size [Integer]
|
216
|
+
# Number of rows per chunk. Every thread will process chunks
|
217
|
+
# of this size.
|
218
|
+
#
|
219
|
+
# @return [Config]
|
220
|
+
def self.set_streaming_chunk_size(size)
|
221
|
+
if size < 1
|
222
|
+
raise ArgumentError, "number of rows per chunk must be >= 1"
|
223
|
+
end
|
224
|
+
|
225
|
+
ENV["POLARS_STREAMING_CHUNK_SIZE"] = size.to_s
|
226
|
+
self
|
227
|
+
end
|
228
|
+
|
229
|
+
# Set table cell alignment.
|
230
|
+
#
|
231
|
+
# @param format [String]
|
232
|
+
# * "LEFT": left aligned
|
233
|
+
# * "CENTER": center aligned
|
234
|
+
# * "RIGHT": right aligned
|
235
|
+
#
|
236
|
+
# @return [Config]
|
237
|
+
#
|
238
|
+
# @example
|
239
|
+
# df = Polars::DataFrame.new(
|
240
|
+
# {"column_abc" => [1.0, 2.5, 5.0], "column_xyz" => [true, false, true]}
|
241
|
+
# )
|
242
|
+
# Polars::Config.new(tbl_cell_alignment: "RIGHT") do
|
243
|
+
# p df
|
244
|
+
# end
|
245
|
+
# # =>
|
246
|
+
# # shape: (3, 2)
|
247
|
+
# # ┌────────────┬────────────┐
|
248
|
+
# # │ column_abc ┆ column_xyz │
|
249
|
+
# # │ --- ┆ --- │
|
250
|
+
# # │ f64 ┆ bool │
|
251
|
+
# # ╞════════════╪════════════╡
|
252
|
+
# # │ 1.0 ┆ true │
|
253
|
+
# # │ 2.5 ┆ false │
|
254
|
+
# # │ 5.0 ┆ true │
|
255
|
+
# # └────────────┴────────────┘
|
256
|
+
def self.set_tbl_cell_alignment(format)
|
257
|
+
ENV["POLARS_FMT_TABLE_CELL_ALIGNMENT"] = format
|
258
|
+
self
|
259
|
+
end
|
260
|
+
|
261
|
+
# Set the number of columns that are visible when displaying tables.
|
262
|
+
#
|
263
|
+
# @param n [Integer]
|
264
|
+
# number of columns to display; if `n < 0` (eg: -1), display all columns.
|
265
|
+
#
|
266
|
+
# @return [Config]
|
267
|
+
#
|
268
|
+
# @example Set number of displayed columns to a low value:
|
269
|
+
# Polars::Config.new do |cfg|
|
270
|
+
# cfg.set_tbl_cols(5)
|
271
|
+
# df = Polars::DataFrame.new(100.times.to_h { |i| [i.to_s, [i]] })
|
272
|
+
# p df
|
273
|
+
# end
|
274
|
+
# # =>
|
275
|
+
# # shape: (1, 100)
|
276
|
+
# # ┌─────┬─────┬─────┬───┬─────┬─────┐
|
277
|
+
# # │ 0 ┆ 1 ┆ 2 ┆ … ┆ 98 ┆ 99 │
|
278
|
+
# # │ --- ┆ --- ┆ --- ┆ ┆ --- ┆ --- │
|
279
|
+
# # │ i64 ┆ i64 ┆ i64 ┆ ┆ i64 ┆ i64 │
|
280
|
+
# # ╞═════╪═════╪═════╪═══╪═════╪═════╡
|
281
|
+
# # │ 0 ┆ 1 ┆ 2 ┆ … ┆ 98 ┆ 99 │
|
282
|
+
# # └─────┴─────┴─────┴───┴─────┴─────┘
|
283
|
+
def self.set_tbl_cols(n)
|
284
|
+
ENV["POLARS_FMT_MAX_COLS"] = n.to_s
|
285
|
+
self
|
286
|
+
end
|
287
|
+
|
288
|
+
# Moves the data type inline with the column name (to the right, in parentheses).
|
289
|
+
#
|
290
|
+
# @return [Config]
|
291
|
+
#
|
292
|
+
# @example
|
293
|
+
# df = Polars::DataFrame.new({"abc" => [1.0, 2.5, 5.0], "xyz" => [true, false, true]})
|
294
|
+
# Polars::Config.new(tbl_column_data_type_inline: true) do
|
295
|
+
# p df
|
296
|
+
# end
|
297
|
+
# # =>
|
298
|
+
# # shape: (3, 2)
|
299
|
+
# # ┌───────────┬────────────┐
|
300
|
+
# # │ abc (f64) ┆ xyz (bool) │
|
301
|
+
# # ╞═══════════╪════════════╡
|
302
|
+
# # │ 1.0 ┆ true │
|
303
|
+
# # │ 2.5 ┆ false │
|
304
|
+
# # │ 5.0 ┆ true │
|
305
|
+
# # └───────────┴────────────┘
|
306
|
+
def self.set_tbl_column_data_type_inline(active = true)
|
307
|
+
ENV["POLARS_FMT_TABLE_INLINE_COLUMN_DATA_TYPE"] = active ? "1" : "0"
|
308
|
+
self
|
309
|
+
end
|
310
|
+
|
311
|
+
# Print the dataframe shape below the dataframe when displaying tables.
|
312
|
+
#
|
313
|
+
# @return [Config]
|
314
|
+
#
|
315
|
+
# @example
|
316
|
+
# df = Polars::DataFrame.new({"abc" => [1.0, 2.5, 5.0], "xyz" => [true, false, true]})
|
317
|
+
# Polars::Config.new(tbl_dataframe_shape_below: true) do
|
318
|
+
# p df
|
319
|
+
# end
|
320
|
+
# # =>
|
321
|
+
# # ┌─────┬───────┐
|
322
|
+
# # │ abc ┆ xyz │
|
323
|
+
# # │ --- ┆ --- │
|
324
|
+
# # │ f64 ┆ bool │
|
325
|
+
# # ╞═════╪═══════╡
|
326
|
+
# # │ 1.0 ┆ true │
|
327
|
+
# # │ 2.5 ┆ false │
|
328
|
+
# # │ 5.0 ┆ true │
|
329
|
+
# # └─────┴───────┘
|
330
|
+
# # shape: (3, 2)
|
331
|
+
def self.set_tbl_dataframe_shape_below(active = true)
|
332
|
+
ENV["POLARS_FMT_TABLE_DATAFRAME_SHAPE_BELOW"] = active ? "1" : "0"
|
333
|
+
self
|
334
|
+
end
|
335
|
+
|
336
|
+
# Set table formatting style.
|
337
|
+
#
|
338
|
+
# @param format [String]
|
339
|
+
# * "ASCII_FULL": ASCII, with all borders and lines, including row dividers.
|
340
|
+
# * "ASCII_FULL_CONDENSED": Same as ASCII_FULL, but with dense row spacing.
|
341
|
+
# * "ASCII_NO_BORDERS": ASCII, no borders.
|
342
|
+
# * "ASCII_BORDERS_ONLY": ASCII, borders only.
|
343
|
+
# * "ASCII_BORDERS_ONLY_CONDENSED": ASCII, borders only, dense row spacing.
|
344
|
+
# * "ASCII_HORIZONTAL_ONLY": ASCII, horizontal lines only.
|
345
|
+
# * "ASCII_MARKDOWN": ASCII, Markdown compatible.
|
346
|
+
# * "UTF8_FULL": UTF8, with all borders and lines, including row dividers.
|
347
|
+
# * "UTF8_FULL_CONDENSED": Same as UTF8_FULL, but with dense row spacing.
|
348
|
+
# * "UTF8_NO_BORDERS": UTF8, no borders.
|
349
|
+
# * "UTF8_BORDERS_ONLY": UTF8, borders only.
|
350
|
+
# * "UTF8_HORIZONTAL_ONLY": UTF8, horizontal lines only.
|
351
|
+
# * "NOTHING": No borders or other lines.
|
352
|
+
# @param rounded_corners [Boolean]
|
353
|
+
# apply rounded corners to UTF8-styled tables (no-op for ASCII formats).
|
354
|
+
#
|
355
|
+
# @note
|
356
|
+
# The UTF8 styles all use one or more of the semigraphic box-drawing characters
|
357
|
+
# found in the Unicode Box Drawing block, which are not ASCII compatible:
|
358
|
+
# https://en.wikipedia.org/wiki/Box-drawing_character#Box_Drawing
|
359
|
+
#
|
360
|
+
# @return [Config]
|
361
|
+
#
|
362
|
+
# @example
|
363
|
+
# df = Polars::DataFrame.new(
|
364
|
+
# {"abc" => [-2.5, 5.0], "mno" => ["hello", "world"], "xyz" => [true, false]}
|
365
|
+
# )
|
366
|
+
# Polars::Config.new(
|
367
|
+
# tbl_formatting: "ASCII_MARKDOWN",
|
368
|
+
# tbl_hide_column_data_types: true,
|
369
|
+
# tbl_hide_dataframe_shape: true
|
370
|
+
# ) do
|
371
|
+
# p df
|
372
|
+
# end
|
373
|
+
# # =>
|
374
|
+
# # | abc | mno | xyz |
|
375
|
+
# # |------|-------|-------|
|
376
|
+
# # | -2.5 | hello | true |
|
377
|
+
# # | 5.0 | world | false |
|
378
|
+
def self.set_tbl_formatting(format = nil, rounded_corners: false)
|
379
|
+
if format
|
380
|
+
ENV["POLARS_FMT_TABLE_FORMATTING"] = format
|
381
|
+
end
|
382
|
+
ENV["POLARS_FMT_TABLE_ROUNDED_CORNERS"] = rounded_corners ? "1" : "0"
|
383
|
+
self
|
384
|
+
end
|
385
|
+
|
386
|
+
# Hide table column data types (i64, f64, str etc.).
|
387
|
+
#
|
388
|
+
# @return [Config]
|
389
|
+
#
|
390
|
+
# @example
|
391
|
+
# df = Polars::DataFrame.new({"abc" => [1.0, 2.5, 5.0], "xyz" => [true, false, true]})
|
392
|
+
# Polars::Config.new(tbl_hide_column_data_types: true) do
|
393
|
+
# p df
|
394
|
+
# end
|
395
|
+
# # =>
|
396
|
+
# # shape: (3, 2)
|
397
|
+
# # ┌─────┬───────┐
|
398
|
+
# # │ abc ┆ xyz │
|
399
|
+
# # ╞═════╪═══════╡
|
400
|
+
# # │ 1.0 ┆ true │
|
401
|
+
# # │ 2.5 ┆ false │
|
402
|
+
# # │ 5.0 ┆ true │
|
403
|
+
# # └─────┴───────┘
|
404
|
+
def self.set_tbl_hide_column_data_types(active = true)
|
405
|
+
ENV["POLARS_FMT_TABLE_HIDE_COLUMN_DATA_TYPES"] = active ? "1" : "0"
|
406
|
+
self
|
407
|
+
end
|
408
|
+
|
409
|
+
# Hide table column names.
|
410
|
+
#
|
411
|
+
# @return [Config]
|
412
|
+
#
|
413
|
+
# @example
|
414
|
+
# df = Polars::DataFrame.new({"abc" => [1.0, 2.5, 5.0], "xyz" => [true, false, true]})
|
415
|
+
# Polars::Config.new(tbl_hide_column_names: true) do
|
416
|
+
# p df
|
417
|
+
# end
|
418
|
+
# # =>
|
419
|
+
# # shape: (3, 2)
|
420
|
+
# # ┌─────┬───────┐
|
421
|
+
# # │ f64 ┆ bool │
|
422
|
+
# # ╞═════╪═══════╡
|
423
|
+
# # │ 1.0 ┆ true │
|
424
|
+
# # │ 2.5 ┆ false │
|
425
|
+
# # │ 5.0 ┆ true │
|
426
|
+
# # └─────┴───────┘
|
427
|
+
def self.set_tbl_hide_column_names(active = true)
|
428
|
+
ENV["POLARS_FMT_TABLE_HIDE_COLUMN_NAMES"] = active ? "1" : "0"
|
429
|
+
self
|
430
|
+
end
|
431
|
+
|
432
|
+
# Hide the '---' separator between the column names and column types.
|
433
|
+
#
|
434
|
+
# @return [Config]
|
435
|
+
#
|
436
|
+
# @example
|
437
|
+
# df = Polars::DataFrame.new({"abc" => [1.0, 2.5, 5.0], "xyz" => [true, false, true]})
|
438
|
+
# Polars::Config.new(tbl_hide_dtype_separator: true) do
|
439
|
+
# p df
|
440
|
+
# end
|
441
|
+
# # =>
|
442
|
+
# # shape: (3, 2)
|
443
|
+
# # ┌─────┬───────┐
|
444
|
+
# # │ abc ┆ xyz │
|
445
|
+
# # │ f64 ┆ bool │
|
446
|
+
# # ╞═════╪═══════╡
|
447
|
+
# # │ 1.0 ┆ true │
|
448
|
+
# # │ 2.5 ┆ false │
|
449
|
+
# # │ 5.0 ┆ true │
|
450
|
+
# # └─────┴───────┘
|
451
|
+
def self.set_tbl_hide_dtype_separator(active = true)
|
452
|
+
ENV["POLARS_FMT_TABLE_HIDE_COLUMN_SEPARATOR"] = active ? "1" : "0"
|
453
|
+
self
|
454
|
+
end
|
455
|
+
|
456
|
+
# Hide the shape information of the dataframe when displaying tables.
|
457
|
+
#
|
458
|
+
# @return [Config]
|
459
|
+
#
|
460
|
+
# @example
|
461
|
+
# df = Polars::DataFrame.new({"abc" => [1.0, 2.5, 5.0], "xyz" => [true, false, true]})
|
462
|
+
# Polars::Config.new(tbl_hide_dataframe_shape: true) do
|
463
|
+
# p df
|
464
|
+
# end
|
465
|
+
# # =>
|
466
|
+
# # ┌─────┬───────┐
|
467
|
+
# # │ abc ┆ xyz │
|
468
|
+
# # │ --- ┆ --- │
|
469
|
+
# # │ f64 ┆ bool │
|
470
|
+
# # ╞═════╪═══════╡
|
471
|
+
# # │ 1.0 ┆ true │
|
472
|
+
# # │ 2.5 ┆ false │
|
473
|
+
# # │ 5.0 ┆ true │
|
474
|
+
# # └─────┴───────┘
|
475
|
+
def self.set_tbl_hide_dataframe_shape(active = true)
|
476
|
+
ENV["POLARS_FMT_TABLE_HIDE_DATAFRAME_SHAPE_INFORMATION"] = active ? "1" : "0"
|
477
|
+
self
|
478
|
+
end
|
479
|
+
|
480
|
+
# Set the max number of rows used to draw the table (both Dataframe and Series).
|
481
|
+
#
|
482
|
+
# @param n [Integer]
|
483
|
+
# number of rows to display; if `n < 0` (eg: -1), display all
|
484
|
+
# rows (DataFrame) and all elements (Series).
|
485
|
+
#
|
486
|
+
# @return [Config]
|
487
|
+
#
|
488
|
+
# @example
|
489
|
+
# df = Polars::DataFrame.new(
|
490
|
+
# {"abc" => [1.0, 2.5, 3.5, 5.0], "xyz" => [true, false, true, false]}
|
491
|
+
# )
|
492
|
+
# Polars::Config.new(tbl_rows: 2) do
|
493
|
+
# p df
|
494
|
+
# end
|
495
|
+
# # =>
|
496
|
+
# # shape: (4, 2)
|
497
|
+
# # ┌─────┬───────┐
|
498
|
+
# # │ abc ┆ xyz │
|
499
|
+
# # │ --- ┆ --- │
|
500
|
+
# # │ f64 ┆ bool │
|
501
|
+
# # ╞═════╪═══════╡
|
502
|
+
# # │ 1.0 ┆ true │
|
503
|
+
# # │ … ┆ … │
|
504
|
+
# # │ 5.0 ┆ false │
|
505
|
+
# # └─────┴───────┘
|
506
|
+
def self.set_tbl_rows(n)
|
507
|
+
ENV["POLARS_FMT_MAX_ROWS"] = n.to_s
|
508
|
+
self
|
509
|
+
end
|
510
|
+
|
511
|
+
# Set the number of characters used to draw the table.
|
512
|
+
#
|
513
|
+
# @param width [Integer]
|
514
|
+
# number of chars
|
515
|
+
#
|
516
|
+
# @return [Config]
|
517
|
+
def self.set_tbl_width_chars(width)
|
518
|
+
ENV["POLARS_TABLE_WIDTH"] = width.to_s
|
519
|
+
self
|
520
|
+
end
|
521
|
+
|
522
|
+
# Enable additional verbose/debug logging.
|
523
|
+
#
|
524
|
+
# @return [Config]
|
525
|
+
def self.set_verbose(active = true)
|
526
|
+
ENV["POLARS_VERBOSE"] = active ? "1" : "0"
|
527
|
+
self
|
528
|
+
end
|
529
|
+
end
|
530
|
+
end
|