polars-df 0.7.0 → 0.9.0
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 +41 -0
- data/Cargo.lock +353 -237
- data/Cargo.toml +0 -3
- data/LICENSE.txt +1 -1
- data/README.md +2 -2
- data/ext/polars/Cargo.toml +17 -6
- data/ext/polars/src/batched_csv.rs +6 -7
- data/ext/polars/src/conversion/anyvalue.rs +185 -0
- data/ext/polars/src/conversion/chunked_array.rs +140 -0
- data/ext/polars/src/{conversion.rs → conversion/mod.rs} +268 -347
- data/ext/polars/src/dataframe.rs +96 -116
- data/ext/polars/src/expr/array.rs +74 -0
- data/ext/polars/src/expr/categorical.rs +8 -1
- data/ext/polars/src/expr/datetime.rs +22 -56
- data/ext/polars/src/expr/general.rs +124 -37
- data/ext/polars/src/expr/list.rs +52 -4
- data/ext/polars/src/expr/meta.rs +48 -0
- data/ext/polars/src/expr/rolling.rs +16 -10
- data/ext/polars/src/expr/string.rs +68 -17
- data/ext/polars/src/expr/struct.rs +8 -4
- data/ext/polars/src/functions/aggregation.rs +6 -0
- data/ext/polars/src/functions/lazy.rs +103 -48
- data/ext/polars/src/functions/meta.rs +45 -1
- data/ext/polars/src/functions/range.rs +5 -10
- data/ext/polars/src/functions/string_cache.rs +14 -0
- data/ext/polars/src/{lazyframe.rs → lazyframe/mod.rs} +166 -41
- data/ext/polars/src/lib.rs +245 -187
- data/ext/polars/src/map/dataframe.rs +1 -1
- data/ext/polars/src/map/mod.rs +2 -2
- data/ext/polars/src/map/series.rs +6 -6
- data/ext/polars/src/object.rs +0 -30
- data/ext/polars/src/on_startup.rs +32 -0
- data/ext/polars/src/series/aggregation.rs +23 -0
- data/ext/polars/src/series/construction.rs +1 -1
- data/ext/polars/src/series/export.rs +2 -2
- data/ext/polars/src/{series.rs → series/mod.rs} +45 -21
- data/ext/polars/src/series/{set_at_idx.rs → scatter.rs} +18 -18
- data/ext/polars/src/utils.rs +1 -1
- data/lib/polars/array_expr.rb +449 -0
- data/lib/polars/array_name_space.rb +346 -0
- data/lib/polars/cat_expr.rb +24 -0
- data/lib/polars/cat_name_space.rb +75 -0
- data/lib/polars/config.rb +2 -2
- data/lib/polars/data_frame.rb +248 -108
- data/lib/polars/data_types.rb +195 -29
- data/lib/polars/date_time_expr.rb +41 -24
- data/lib/polars/date_time_name_space.rb +12 -12
- data/lib/polars/exceptions.rb +12 -1
- data/lib/polars/expr.rb +1080 -195
- 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 +248 -0
- data/lib/polars/functions/col.rb +47 -0
- data/lib/polars/functions/eager.rb +182 -0
- data/lib/polars/functions/lazy.rb +1280 -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 +103 -0
- data/lib/polars/functions/range/int_range.rb +51 -0
- data/lib/polars/functions/repeat.rb +144 -0
- data/lib/polars/functions/whenthen.rb +27 -0
- data/lib/polars/functions.rb +29 -416
- data/lib/polars/group_by.rb +3 -3
- data/lib/polars/io.rb +21 -28
- data/lib/polars/lazy_frame.rb +390 -76
- data/lib/polars/list_expr.rb +152 -6
- data/lib/polars/list_name_space.rb +102 -0
- data/lib/polars/meta_expr.rb +175 -7
- data/lib/polars/series.rb +557 -59
- data/lib/polars/sql_context.rb +1 -1
- data/lib/polars/string_cache.rb +75 -0
- data/lib/polars/string_expr.rb +412 -96
- data/lib/polars/string_name_space.rb +4 -4
- data/lib/polars/struct_expr.rb +1 -1
- data/lib/polars/struct_name_space.rb +1 -1
- data/lib/polars/testing.rb +507 -0
- data/lib/polars/utils.rb +64 -20
- data/lib/polars/version.rb +1 -1
- data/lib/polars.rb +15 -2
- metadata +40 -9
- data/lib/polars/lazy_functions.rb +0 -1197
@@ -1,9 +1,10 @@
|
|
1
1
|
use magnus::{IntoValue, RArray, RHash, TryConvert, Value};
|
2
|
-
use polars::io::
|
2
|
+
use polars::io::RowIndex;
|
3
3
|
use polars::lazy::frame::LazyFrame;
|
4
4
|
use polars::prelude::*;
|
5
5
|
use std::cell::RefCell;
|
6
6
|
use std::io::{BufWriter, Read};
|
7
|
+
use std::num::NonZeroUsize;
|
7
8
|
use std::path::PathBuf;
|
8
9
|
|
9
10
|
use crate::conversion::*;
|
@@ -55,13 +56,14 @@ impl RbLazyFrame {
|
|
55
56
|
pub fn new_from_ndjson(
|
56
57
|
path: String,
|
57
58
|
infer_schema_length: Option<usize>,
|
58
|
-
batch_size: Option<
|
59
|
+
batch_size: Option<Wrap<NonZeroUsize>>,
|
59
60
|
n_rows: Option<usize>,
|
60
61
|
low_memory: bool,
|
61
62
|
rechunk: bool,
|
62
|
-
|
63
|
+
row_index: Option<(String, IdxSize)>,
|
63
64
|
) -> RbResult<Self> {
|
64
|
-
let
|
65
|
+
let batch_size = batch_size.map(|v| v.0);
|
66
|
+
let row_index = row_index.map(|(name, offset)| RowIndex { name, offset });
|
65
67
|
|
66
68
|
let lf = LazyJsonLineReader::new(path)
|
67
69
|
.with_infer_schema_length(infer_schema_length)
|
@@ -69,7 +71,7 @@ impl RbLazyFrame {
|
|
69
71
|
.with_n_rows(n_rows)
|
70
72
|
.low_memory(low_memory)
|
71
73
|
.with_rechunk(rechunk)
|
72
|
-
.
|
74
|
+
.with_row_index(row_index)
|
73
75
|
.finish()
|
74
76
|
.map_err(RbPolarsErr::from)?;
|
75
77
|
Ok(lf.into())
|
@@ -87,7 +89,7 @@ impl RbLazyFrame {
|
|
87
89
|
let cache = bool::try_convert(arguments[6])?;
|
88
90
|
let overwrite_dtype = Option::<Vec<(String, Wrap<DataType>)>>::try_convert(arguments[7])?;
|
89
91
|
let low_memory = bool::try_convert(arguments[8])?;
|
90
|
-
let
|
92
|
+
let comment_prefix = Option::<String>::try_convert(arguments[9])?;
|
91
93
|
let quote_char = Option::<String>::try_convert(arguments[10])?;
|
92
94
|
let null_values = Option::<Wrap<NullValues>>::try_convert(arguments[11])?;
|
93
95
|
let infer_schema_length = Option::<usize>::try_convert(arguments[12])?;
|
@@ -95,18 +97,17 @@ impl RbLazyFrame {
|
|
95
97
|
let rechunk = bool::try_convert(arguments[14])?;
|
96
98
|
let skip_rows_after_header = usize::try_convert(arguments[15])?;
|
97
99
|
let encoding = Wrap::<CsvEncoding>::try_convert(arguments[16])?;
|
98
|
-
let
|
100
|
+
let row_index = Option::<(String, IdxSize)>::try_convert(arguments[17])?;
|
99
101
|
let try_parse_dates = bool::try_convert(arguments[18])?;
|
100
102
|
let eol_char = String::try_convert(arguments[19])?;
|
101
103
|
// end arguments
|
102
104
|
|
103
105
|
let null_values = null_values.map(|w| w.0);
|
104
|
-
let comment_char = comment_char.map(|s| s.as_bytes()[0]);
|
105
106
|
let quote_char = quote_char.map(|s| s.as_bytes()[0]);
|
106
107
|
let separator = separator.as_bytes()[0];
|
107
108
|
let eol_char = eol_char.as_bytes()[0];
|
108
109
|
|
109
|
-
let
|
110
|
+
let row_index = row_index.map(|(name, offset)| RowIndex { name, offset });
|
110
111
|
|
111
112
|
let overwrite_dtype = overwrite_dtype.map(|overwrite_dtype| {
|
112
113
|
overwrite_dtype
|
@@ -124,13 +125,13 @@ impl RbLazyFrame {
|
|
124
125
|
.with_cache(cache)
|
125
126
|
.with_dtype_overwrite(overwrite_dtype.as_ref())
|
126
127
|
.low_memory(low_memory)
|
127
|
-
.
|
128
|
+
.with_comment_prefix(comment_prefix.as_deref())
|
128
129
|
.with_quote_char(quote_char)
|
129
130
|
.with_end_of_line_char(eol_char)
|
130
131
|
.with_rechunk(rechunk)
|
131
132
|
.with_skip_rows_after_header(skip_rows_after_header)
|
132
133
|
.with_encoding(encoding.0)
|
133
|
-
.
|
134
|
+
.with_row_index(row_index)
|
134
135
|
.with_try_parse_dates(try_parse_dates)
|
135
136
|
.with_null_values(null_values);
|
136
137
|
|
@@ -148,18 +149,18 @@ impl RbLazyFrame {
|
|
148
149
|
cache: bool,
|
149
150
|
parallel: Wrap<ParallelStrategy>,
|
150
151
|
rechunk: bool,
|
151
|
-
|
152
|
+
row_index: Option<(String, IdxSize)>,
|
152
153
|
low_memory: bool,
|
153
154
|
use_statistics: bool,
|
154
155
|
hive_partitioning: bool,
|
155
156
|
) -> RbResult<Self> {
|
156
|
-
let
|
157
|
+
let row_index = row_index.map(|(name, offset)| RowIndex { name, offset });
|
157
158
|
let args = ScanArgsParquet {
|
158
159
|
n_rows,
|
159
160
|
cache,
|
160
161
|
parallel: parallel.0,
|
161
162
|
rechunk,
|
162
|
-
|
163
|
+
row_index,
|
163
164
|
low_memory,
|
164
165
|
// TODO support cloud options
|
165
166
|
cloud_options: None,
|
@@ -175,15 +176,15 @@ impl RbLazyFrame {
|
|
175
176
|
n_rows: Option<usize>,
|
176
177
|
cache: bool,
|
177
178
|
rechunk: bool,
|
178
|
-
|
179
|
+
row_index: Option<(String, IdxSize)>,
|
179
180
|
memory_map: bool,
|
180
181
|
) -> RbResult<Self> {
|
181
|
-
let
|
182
|
+
let row_index = row_index.map(|(name, offset)| RowIndex { name, offset });
|
182
183
|
let args = ScanArgsIpc {
|
183
184
|
n_rows,
|
184
185
|
cache,
|
185
186
|
rechunk,
|
186
|
-
|
187
|
+
row_index,
|
187
188
|
memmap: memory_map,
|
188
189
|
};
|
189
190
|
let lf = LazyFrame::scan_ipc(path, args).map_err(RbPolarsErr::from)?;
|
@@ -217,20 +218,24 @@ impl RbLazyFrame {
|
|
217
218
|
projection_pushdown: bool,
|
218
219
|
simplify_expr: bool,
|
219
220
|
slice_pushdown: bool,
|
220
|
-
|
221
|
+
comm_subplan_elim: bool,
|
222
|
+
comm_subexpr_elim: bool,
|
221
223
|
allow_streaming: bool,
|
222
224
|
_eager: bool,
|
223
225
|
) -> RbLazyFrame {
|
224
226
|
let ldf = self.ldf.clone();
|
225
|
-
let ldf = ldf
|
227
|
+
let mut ldf = ldf
|
226
228
|
.with_type_coercion(type_coercion)
|
227
229
|
.with_predicate_pushdown(predicate_pushdown)
|
228
230
|
.with_simplify_expr(simplify_expr)
|
229
231
|
.with_slice_pushdown(slice_pushdown)
|
230
|
-
.with_comm_subplan_elim(cse)
|
231
232
|
.with_streaming(allow_streaming)
|
232
233
|
._with_eager(_eager)
|
233
234
|
.with_projection_pushdown(projection_pushdown);
|
235
|
+
|
236
|
+
ldf = ldf.with_comm_subplan_elim(comm_subplan_elim);
|
237
|
+
ldf = ldf.with_comm_subexpr_elim(comm_subexpr_elim);
|
238
|
+
|
234
239
|
ldf.into()
|
235
240
|
}
|
236
241
|
|
@@ -305,6 +310,75 @@ impl RbLazyFrame {
|
|
305
310
|
Ok(())
|
306
311
|
}
|
307
312
|
|
313
|
+
pub fn sink_ipc(
|
314
|
+
&self,
|
315
|
+
path: PathBuf,
|
316
|
+
compression: Option<Wrap<IpcCompression>>,
|
317
|
+
maintain_order: bool,
|
318
|
+
) -> RbResult<()> {
|
319
|
+
let options = IpcWriterOptions {
|
320
|
+
compression: compression.map(|c| c.0),
|
321
|
+
maintain_order,
|
322
|
+
};
|
323
|
+
|
324
|
+
let ldf = self.ldf.clone();
|
325
|
+
ldf.sink_ipc(path, options).map_err(RbPolarsErr::from)?;
|
326
|
+
Ok(())
|
327
|
+
}
|
328
|
+
|
329
|
+
pub fn sink_csv(
|
330
|
+
&self,
|
331
|
+
path: PathBuf,
|
332
|
+
include_bom: bool,
|
333
|
+
include_header: bool,
|
334
|
+
separator: u8,
|
335
|
+
line_terminator: String,
|
336
|
+
quote_char: u8,
|
337
|
+
batch_size: Wrap<NonZeroUsize>,
|
338
|
+
datetime_format: Option<String>,
|
339
|
+
date_format: Option<String>,
|
340
|
+
time_format: Option<String>,
|
341
|
+
float_precision: Option<usize>,
|
342
|
+
null_value: Option<String>,
|
343
|
+
quote_style: Option<Wrap<QuoteStyle>>,
|
344
|
+
maintain_order: bool,
|
345
|
+
) -> RbResult<()> {
|
346
|
+
let quote_style = quote_style.map_or(QuoteStyle::default(), |wrap| wrap.0);
|
347
|
+
let null_value = null_value.unwrap_or(SerializeOptions::default().null);
|
348
|
+
|
349
|
+
let serialize_options = SerializeOptions {
|
350
|
+
date_format,
|
351
|
+
time_format,
|
352
|
+
datetime_format,
|
353
|
+
float_precision,
|
354
|
+
separator,
|
355
|
+
quote_char,
|
356
|
+
null: null_value,
|
357
|
+
line_terminator,
|
358
|
+
quote_style,
|
359
|
+
};
|
360
|
+
|
361
|
+
let options = CsvWriterOptions {
|
362
|
+
include_bom,
|
363
|
+
include_header,
|
364
|
+
maintain_order,
|
365
|
+
batch_size: batch_size.0,
|
366
|
+
serialize_options,
|
367
|
+
};
|
368
|
+
|
369
|
+
let ldf = self.ldf.clone();
|
370
|
+
ldf.sink_csv(path, options).map_err(RbPolarsErr::from)?;
|
371
|
+
Ok(())
|
372
|
+
}
|
373
|
+
|
374
|
+
pub fn sink_json(&self, path: PathBuf, maintain_order: bool) -> RbResult<()> {
|
375
|
+
let options = JsonWriterOptions { maintain_order };
|
376
|
+
|
377
|
+
let ldf = self.ldf.clone();
|
378
|
+
ldf.sink_json(path, options).map_err(RbPolarsErr::from)?;
|
379
|
+
Ok(())
|
380
|
+
}
|
381
|
+
|
308
382
|
pub fn fetch(&self, n_rows: usize) -> RbResult<RbDataFrame> {
|
309
383
|
let ldf = self.ldf.clone();
|
310
384
|
let df = ldf.fetch(n_rows).map_err(RbPolarsErr::from)?;
|
@@ -322,6 +396,12 @@ impl RbLazyFrame {
|
|
322
396
|
Ok(ldf.select(exprs).into())
|
323
397
|
}
|
324
398
|
|
399
|
+
pub fn select_seq(&self, exprs: RArray) -> RbResult<Self> {
|
400
|
+
let ldf = self.ldf.clone();
|
401
|
+
let exprs = rb_exprs_to_exprs(exprs)?;
|
402
|
+
Ok(ldf.select_seq(exprs).into())
|
403
|
+
}
|
404
|
+
|
325
405
|
pub fn group_by(&self, by: RArray, maintain_order: bool) -> RbResult<RbLazyGroupBy> {
|
326
406
|
let ldf = self.ldf.clone();
|
327
407
|
let by = rb_exprs_to_exprs(by)?;
|
@@ -335,7 +415,7 @@ impl RbLazyFrame {
|
|
335
415
|
})
|
336
416
|
}
|
337
417
|
|
338
|
-
pub fn
|
418
|
+
pub fn rolling(
|
339
419
|
&self,
|
340
420
|
index_column: &RbExpr,
|
341
421
|
period: String,
|
@@ -460,6 +540,7 @@ impl RbLazyFrame {
|
|
460
540
|
right_on: RArray,
|
461
541
|
allow_parallel: bool,
|
462
542
|
force_parallel: bool,
|
543
|
+
join_nulls: bool,
|
463
544
|
how: Wrap<JoinType>,
|
464
545
|
suffix: String,
|
465
546
|
) -> RbResult<Self> {
|
@@ -475,17 +556,28 @@ impl RbLazyFrame {
|
|
475
556
|
.right_on(right_on)
|
476
557
|
.allow_parallel(allow_parallel)
|
477
558
|
.force_parallel(force_parallel)
|
559
|
+
.join_nulls(join_nulls)
|
478
560
|
.how(how.0)
|
479
561
|
.suffix(suffix)
|
480
562
|
.finish()
|
481
563
|
.into())
|
482
564
|
}
|
483
565
|
|
566
|
+
pub fn with_column(&self, expr: &RbExpr) -> Self {
|
567
|
+
let ldf = self.ldf.clone();
|
568
|
+
ldf.with_column(expr.inner.clone()).into()
|
569
|
+
}
|
570
|
+
|
484
571
|
pub fn with_columns(&self, exprs: RArray) -> RbResult<Self> {
|
485
572
|
let ldf = self.ldf.clone();
|
486
573
|
Ok(ldf.with_columns(rb_exprs_to_exprs(exprs)?).into())
|
487
574
|
}
|
488
575
|
|
576
|
+
pub fn with_columns_seq(&self, exprs: RArray) -> RbResult<Self> {
|
577
|
+
let ldf = self.ldf.clone();
|
578
|
+
Ok(ldf.with_columns_seq(rb_exprs_to_exprs(exprs)?).into())
|
579
|
+
}
|
580
|
+
|
489
581
|
pub fn rename(&self, existing: Vec<String>, new: Vec<String>) -> Self {
|
490
582
|
let ldf = self.ldf.clone();
|
491
583
|
ldf.rename(existing, new).into()
|
@@ -510,48 +602,58 @@ impl RbLazyFrame {
|
|
510
602
|
ldf.fill_nan(fill_value.inner.clone()).into()
|
511
603
|
}
|
512
604
|
|
513
|
-
pub fn min(&self) -> Self {
|
605
|
+
pub fn min(&self) -> RbResult<Self> {
|
514
606
|
let ldf = self.ldf.clone();
|
515
|
-
ldf.min().
|
607
|
+
let out = ldf.min().map_err(RbPolarsErr::from)?;
|
608
|
+
Ok(out.into())
|
516
609
|
}
|
517
610
|
|
518
|
-
pub fn max(&self) -> Self {
|
611
|
+
pub fn max(&self) -> RbResult<Self> {
|
519
612
|
let ldf = self.ldf.clone();
|
520
|
-
ldf.max().
|
613
|
+
let out = ldf.max().map_err(RbPolarsErr::from)?;
|
614
|
+
Ok(out.into())
|
521
615
|
}
|
522
616
|
|
523
|
-
pub fn sum(&self) -> Self {
|
617
|
+
pub fn sum(&self) -> RbResult<Self> {
|
524
618
|
let ldf = self.ldf.clone();
|
525
|
-
ldf.sum().
|
619
|
+
let out = ldf.sum().map_err(RbPolarsErr::from)?;
|
620
|
+
Ok(out.into())
|
526
621
|
}
|
527
622
|
|
528
|
-
pub fn mean(&self) -> Self {
|
623
|
+
pub fn mean(&self) -> RbResult<Self> {
|
529
624
|
let ldf = self.ldf.clone();
|
530
|
-
ldf.mean().
|
625
|
+
let out = ldf.mean().map_err(RbPolarsErr::from)?;
|
626
|
+
Ok(out.into())
|
531
627
|
}
|
532
628
|
|
533
|
-
pub fn std(&self, ddof: u8) -> Self {
|
629
|
+
pub fn std(&self, ddof: u8) -> RbResult<Self> {
|
534
630
|
let ldf = self.ldf.clone();
|
535
|
-
ldf.std(ddof).
|
631
|
+
let out = ldf.std(ddof).map_err(RbPolarsErr::from)?;
|
632
|
+
Ok(out.into())
|
536
633
|
}
|
537
634
|
|
538
|
-
pub fn var(&self, ddof: u8) -> Self {
|
635
|
+
pub fn var(&self, ddof: u8) -> RbResult<Self> {
|
539
636
|
let ldf = self.ldf.clone();
|
540
|
-
ldf.var(ddof).
|
637
|
+
let out = ldf.var(ddof).map_err(RbPolarsErr::from)?;
|
638
|
+
Ok(out.into())
|
541
639
|
}
|
542
640
|
|
543
|
-
pub fn median(&self) -> Self {
|
641
|
+
pub fn median(&self) -> RbResult<Self> {
|
544
642
|
let ldf = self.ldf.clone();
|
545
|
-
ldf.median().
|
643
|
+
let out = ldf.median().map_err(RbPolarsErr::from)?;
|
644
|
+
Ok(out.into())
|
546
645
|
}
|
547
646
|
|
548
647
|
pub fn quantile(
|
549
648
|
&self,
|
550
649
|
quantile: &RbExpr,
|
551
650
|
interpolation: Wrap<QuantileInterpolOptions>,
|
552
|
-
) -> Self {
|
651
|
+
) -> RbResult<Self> {
|
553
652
|
let ldf = self.ldf.clone();
|
554
|
-
ldf
|
653
|
+
let out = ldf
|
654
|
+
.quantile(quantile.inner.clone(), interpolation.0)
|
655
|
+
.map_err(RbPolarsErr::from)?;
|
656
|
+
Ok(out.into())
|
555
657
|
}
|
556
658
|
|
557
659
|
pub fn explode(&self, column: RArray) -> RbResult<Self> {
|
@@ -560,6 +662,11 @@ impl RbLazyFrame {
|
|
560
662
|
Ok(ldf.explode(column).into())
|
561
663
|
}
|
562
664
|
|
665
|
+
pub fn null_count(&self) -> Self {
|
666
|
+
let ldf = self.ldf.clone();
|
667
|
+
ldf.null_count().into()
|
668
|
+
}
|
669
|
+
|
563
670
|
pub fn unique(
|
564
671
|
&self,
|
565
672
|
maintain_order: bool,
|
@@ -610,14 +717,18 @@ impl RbLazyFrame {
|
|
610
717
|
ldf.melt(args).into()
|
611
718
|
}
|
612
719
|
|
613
|
-
pub fn
|
720
|
+
pub fn with_row_index(&self, name: String, offset: Option<IdxSize>) -> Self {
|
614
721
|
let ldf = self.ldf.clone();
|
615
|
-
ldf.
|
722
|
+
ldf.with_row_index(&name, offset).into()
|
616
723
|
}
|
617
724
|
|
618
|
-
pub fn
|
725
|
+
pub fn drop(&self, cols: Vec<String>) -> Self {
|
619
726
|
let ldf = self.ldf.clone();
|
620
|
-
ldf.
|
727
|
+
ldf.drop(cols).into()
|
728
|
+
}
|
729
|
+
|
730
|
+
pub fn cast_all(&self, dtype: Wrap<DataType>, strict: bool) -> Self {
|
731
|
+
self.ldf.clone().cast_all(dtype.0, strict).into()
|
621
732
|
}
|
622
733
|
|
623
734
|
pub fn clone(&self) -> Self {
|
@@ -659,4 +770,18 @@ impl RbLazyFrame {
|
|
659
770
|
pub fn width(&self) -> RbResult<usize> {
|
660
771
|
Ok(self.get_schema()?.len())
|
661
772
|
}
|
773
|
+
|
774
|
+
pub fn count(&self) -> Self {
|
775
|
+
let ldf = self.ldf.clone();
|
776
|
+
ldf.count().into()
|
777
|
+
}
|
778
|
+
|
779
|
+
pub fn merge_sorted(&self, other: &Self, key: String) -> RbResult<Self> {
|
780
|
+
let out = self
|
781
|
+
.ldf
|
782
|
+
.clone()
|
783
|
+
.merge_sorted(other.ldf.clone(), &key)
|
784
|
+
.map_err(RbPolarsErr::from)?;
|
785
|
+
Ok(out.into())
|
786
|
+
}
|
662
787
|
}
|