polars-df 0.8.0 → 0.10.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 +42 -1
- data/Cargo.lock +159 -66
- data/Cargo.toml +0 -3
- data/LICENSE.txt +1 -1
- data/README.md +3 -2
- data/ext/polars/Cargo.toml +18 -8
- data/ext/polars/src/batched_csv.rs +7 -5
- data/ext/polars/src/conversion/anyvalue.rs +186 -0
- data/ext/polars/src/conversion/chunked_array.rs +140 -0
- data/ext/polars/src/{conversion.rs → conversion/mod.rs} +273 -342
- data/ext/polars/src/dataframe.rs +108 -66
- data/ext/polars/src/expr/array.rs +78 -0
- data/ext/polars/src/expr/datetime.rs +29 -58
- data/ext/polars/src/expr/general.rs +83 -36
- data/ext/polars/src/expr/list.rs +58 -6
- data/ext/polars/src/expr/meta.rs +48 -0
- data/ext/polars/src/expr/rolling.rs +1 -0
- data/ext/polars/src/expr/string.rs +62 -11
- data/ext/polars/src/expr/struct.rs +8 -4
- data/ext/polars/src/file.rs +158 -11
- data/ext/polars/src/functions/aggregation.rs +6 -0
- data/ext/polars/src/functions/lazy.rs +120 -50
- data/ext/polars/src/functions/meta.rs +45 -1
- data/ext/polars/src/functions/string_cache.rs +14 -0
- data/ext/polars/src/functions/whenthen.rs +47 -17
- data/ext/polars/src/{lazyframe.rs → lazyframe/mod.rs} +195 -40
- data/ext/polars/src/lib.rs +246 -179
- data/ext/polars/src/map/dataframe.rs +17 -9
- data/ext/polars/src/series/aggregation.rs +20 -0
- data/ext/polars/src/series/mod.rs +35 -4
- data/lib/polars/array_expr.rb +453 -0
- data/lib/polars/array_name_space.rb +346 -0
- data/lib/polars/batched_csv_reader.rb +4 -2
- 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 +306 -96
- data/lib/polars/data_types.rb +191 -28
- data/lib/polars/date_time_expr.rb +41 -18
- data/lib/polars/date_time_name_space.rb +9 -3
- data/lib/polars/exceptions.rb +12 -1
- data/lib/polars/expr.rb +898 -215
- 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 +96 -0
- data/lib/polars/functions.rb +29 -416
- data/lib/polars/group_by.rb +2 -2
- data/lib/polars/io.rb +36 -31
- data/lib/polars/lazy_frame.rb +405 -88
- data/lib/polars/list_expr.rb +158 -8
- data/lib/polars/list_name_space.rb +102 -0
- data/lib/polars/meta_expr.rb +175 -7
- data/lib/polars/series.rb +282 -41
- data/lib/polars/string_cache.rb +75 -0
- data/lib/polars/string_expr.rb +413 -96
- data/lib/polars/string_name_space.rb +4 -4
- data/lib/polars/testing.rb +507 -0
- data/lib/polars/utils.rb +106 -8
- data/lib/polars/version.rb +1 -1
- data/lib/polars/whenthen.rb +83 -0
- data/lib/polars.rb +16 -4
- metadata +37 -8
- data/lib/polars/lazy_functions.rb +0 -1181
- data/lib/polars/when.rb +0 -16
- data/lib/polars/when_then.rb +0 -19
@@ -1,9 +1,10 @@
|
|
1
1
|
use magnus::{IntoValue, RArray, RHash, TryConvert, Value};
|
2
|
-
use polars::io::
|
2
|
+
use polars::io::{HiveOptions, 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())
|
@@ -95,17 +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])?;
|
103
|
+
let truncate_ragged_lines = bool::try_convert(arguments[20])?;
|
101
104
|
// end arguments
|
102
105
|
|
103
106
|
let null_values = null_values.map(|w| w.0);
|
104
107
|
let quote_char = quote_char.map(|s| s.as_bytes()[0]);
|
105
108
|
let separator = separator.as_bytes()[0];
|
106
109
|
let eol_char = eol_char.as_bytes()[0];
|
107
|
-
|
108
|
-
let row_count = row_count.map(|(name, offset)| RowCount { name, offset });
|
110
|
+
let row_index = row_index.map(|(name, offset)| RowIndex { name, offset });
|
109
111
|
|
110
112
|
let overwrite_dtype = overwrite_dtype.map(|overwrite_dtype| {
|
111
113
|
overwrite_dtype
|
@@ -113,6 +115,7 @@ impl RbLazyFrame {
|
|
113
115
|
.map(|(name, dtype)| Field::new(&name, dtype.0))
|
114
116
|
.collect::<Schema>()
|
115
117
|
});
|
118
|
+
|
116
119
|
let r = LazyCsvReader::new(path)
|
117
120
|
.with_infer_schema_length(infer_schema_length)
|
118
121
|
.with_separator(separator)
|
@@ -122,6 +125,7 @@ impl RbLazyFrame {
|
|
122
125
|
.with_n_rows(n_rows)
|
123
126
|
.with_cache(cache)
|
124
127
|
.with_dtype_overwrite(overwrite_dtype.as_ref())
|
128
|
+
// TODO add with_schema
|
125
129
|
.low_memory(low_memory)
|
126
130
|
.with_comment_prefix(comment_prefix.as_deref())
|
127
131
|
.with_quote_char(quote_char)
|
@@ -129,9 +133,11 @@ impl RbLazyFrame {
|
|
129
133
|
.with_rechunk(rechunk)
|
130
134
|
.with_skip_rows_after_header(skip_rows_after_header)
|
131
135
|
.with_encoding(encoding.0)
|
132
|
-
.
|
136
|
+
.with_row_index(row_index)
|
133
137
|
.with_try_parse_dates(try_parse_dates)
|
134
|
-
.with_null_values(null_values)
|
138
|
+
.with_null_values(null_values)
|
139
|
+
// TODO add with_missing_is_null
|
140
|
+
.truncate_ragged_lines(truncate_ragged_lines);
|
135
141
|
|
136
142
|
if let Some(_lambda) = with_schema_modify {
|
137
143
|
todo!();
|
@@ -142,30 +148,53 @@ impl RbLazyFrame {
|
|
142
148
|
|
143
149
|
#[allow(clippy::too_many_arguments)]
|
144
150
|
pub fn new_from_parquet(
|
145
|
-
path:
|
151
|
+
path: Option<PathBuf>,
|
152
|
+
paths: Vec<PathBuf>,
|
146
153
|
n_rows: Option<usize>,
|
147
154
|
cache: bool,
|
148
155
|
parallel: Wrap<ParallelStrategy>,
|
149
156
|
rechunk: bool,
|
150
|
-
|
157
|
+
row_index: Option<(String, IdxSize)>,
|
151
158
|
low_memory: bool,
|
152
159
|
use_statistics: bool,
|
153
160
|
hive_partitioning: bool,
|
161
|
+
hive_schema: Option<Wrap<Schema>>,
|
154
162
|
) -> RbResult<Self> {
|
155
|
-
let
|
163
|
+
let parallel = parallel.0;
|
164
|
+
let hive_schema = hive_schema.map(|s| Arc::new(s.0));
|
165
|
+
|
166
|
+
let first_path = if let Some(path) = &path {
|
167
|
+
path
|
168
|
+
} else {
|
169
|
+
paths
|
170
|
+
.first()
|
171
|
+
.ok_or_else(|| RbValueError::new_err("expected a path argument".to_string()))?
|
172
|
+
};
|
173
|
+
|
174
|
+
let row_index = row_index.map(|(name, offset)| RowIndex { name, offset });
|
175
|
+
let hive_options = HiveOptions {
|
176
|
+
enabled: hive_partitioning,
|
177
|
+
schema: hive_schema,
|
178
|
+
};
|
179
|
+
|
156
180
|
let args = ScanArgsParquet {
|
157
181
|
n_rows,
|
158
182
|
cache,
|
159
|
-
parallel
|
183
|
+
parallel,
|
160
184
|
rechunk,
|
161
|
-
|
185
|
+
row_index,
|
162
186
|
low_memory,
|
163
|
-
// TODO support cloud options
|
164
187
|
cloud_options: None,
|
165
188
|
use_statistics,
|
166
|
-
|
189
|
+
hive_options,
|
167
190
|
};
|
168
|
-
|
191
|
+
|
192
|
+
let lf = if path.is_some() {
|
193
|
+
LazyFrame::scan_parquet(first_path, args)
|
194
|
+
} else {
|
195
|
+
LazyFrame::scan_parquet_files(Arc::from(paths), args)
|
196
|
+
}
|
197
|
+
.map_err(RbPolarsErr::from)?;
|
169
198
|
Ok(lf.into())
|
170
199
|
}
|
171
200
|
|
@@ -174,16 +203,17 @@ impl RbLazyFrame {
|
|
174
203
|
n_rows: Option<usize>,
|
175
204
|
cache: bool,
|
176
205
|
rechunk: bool,
|
177
|
-
|
206
|
+
row_index: Option<(String, IdxSize)>,
|
178
207
|
memory_map: bool,
|
179
208
|
) -> RbResult<Self> {
|
180
|
-
let
|
209
|
+
let row_index = row_index.map(|(name, offset)| RowIndex { name, offset });
|
181
210
|
let args = ScanArgsIpc {
|
182
211
|
n_rows,
|
183
212
|
cache,
|
184
213
|
rechunk,
|
185
|
-
|
186
|
-
|
214
|
+
row_index,
|
215
|
+
memory_map,
|
216
|
+
cloud_options: None,
|
187
217
|
};
|
188
218
|
let lf = LazyFrame::scan_ipc(path, args).map_err(RbPolarsErr::from)?;
|
189
219
|
Ok(lf.into())
|
@@ -216,37 +246,42 @@ impl RbLazyFrame {
|
|
216
246
|
projection_pushdown: bool,
|
217
247
|
simplify_expr: bool,
|
218
248
|
slice_pushdown: bool,
|
219
|
-
|
249
|
+
comm_subplan_elim: bool,
|
250
|
+
comm_subexpr_elim: bool,
|
220
251
|
allow_streaming: bool,
|
221
252
|
_eager: bool,
|
222
253
|
) -> RbLazyFrame {
|
223
254
|
let ldf = self.ldf.clone();
|
224
|
-
let ldf = ldf
|
255
|
+
let mut ldf = ldf
|
225
256
|
.with_type_coercion(type_coercion)
|
226
257
|
.with_predicate_pushdown(predicate_pushdown)
|
227
258
|
.with_simplify_expr(simplify_expr)
|
228
259
|
.with_slice_pushdown(slice_pushdown)
|
229
|
-
.with_comm_subplan_elim(cse)
|
230
260
|
.with_streaming(allow_streaming)
|
231
261
|
._with_eager(_eager)
|
232
262
|
.with_projection_pushdown(projection_pushdown);
|
263
|
+
|
264
|
+
ldf = ldf.with_comm_subplan_elim(comm_subplan_elim);
|
265
|
+
ldf = ldf.with_comm_subexpr_elim(comm_subexpr_elim);
|
266
|
+
|
233
267
|
ldf.into()
|
234
268
|
}
|
235
269
|
|
236
270
|
pub fn sort(
|
237
271
|
&self,
|
238
272
|
by_column: String,
|
239
|
-
|
273
|
+
descending: bool,
|
240
274
|
nulls_last: bool,
|
241
275
|
maintain_order: bool,
|
276
|
+
multithreaded: bool,
|
242
277
|
) -> Self {
|
243
278
|
let ldf = self.ldf.clone();
|
244
279
|
ldf.sort(
|
245
|
-
&by_column,
|
246
|
-
|
247
|
-
descending:
|
280
|
+
[&by_column],
|
281
|
+
SortMultipleOptions {
|
282
|
+
descending: vec![descending],
|
248
283
|
nulls_last,
|
249
|
-
multithreaded
|
284
|
+
multithreaded,
|
250
285
|
maintain_order,
|
251
286
|
},
|
252
287
|
)
|
@@ -255,15 +290,24 @@ impl RbLazyFrame {
|
|
255
290
|
|
256
291
|
pub fn sort_by_exprs(
|
257
292
|
&self,
|
258
|
-
|
259
|
-
|
293
|
+
by: RArray,
|
294
|
+
descending: Vec<bool>,
|
260
295
|
nulls_last: bool,
|
261
296
|
maintain_order: bool,
|
297
|
+
multithreaded: bool,
|
262
298
|
) -> RbResult<Self> {
|
263
299
|
let ldf = self.ldf.clone();
|
264
|
-
let exprs = rb_exprs_to_exprs(
|
300
|
+
let exprs = rb_exprs_to_exprs(by)?;
|
265
301
|
Ok(ldf
|
266
|
-
.sort_by_exprs(
|
302
|
+
.sort_by_exprs(
|
303
|
+
exprs,
|
304
|
+
SortMultipleOptions {
|
305
|
+
descending,
|
306
|
+
nulls_last,
|
307
|
+
maintain_order,
|
308
|
+
multithreaded,
|
309
|
+
},
|
310
|
+
)
|
267
311
|
.into())
|
268
312
|
}
|
269
313
|
|
@@ -304,6 +348,76 @@ impl RbLazyFrame {
|
|
304
348
|
Ok(())
|
305
349
|
}
|
306
350
|
|
351
|
+
pub fn sink_ipc(
|
352
|
+
&self,
|
353
|
+
path: PathBuf,
|
354
|
+
compression: Option<Wrap<IpcCompression>>,
|
355
|
+
maintain_order: bool,
|
356
|
+
) -> RbResult<()> {
|
357
|
+
let options = IpcWriterOptions {
|
358
|
+
compression: compression.map(|c| c.0),
|
359
|
+
maintain_order,
|
360
|
+
};
|
361
|
+
|
362
|
+
let ldf = self.ldf.clone();
|
363
|
+
ldf.sink_ipc(path, options).map_err(RbPolarsErr::from)?;
|
364
|
+
Ok(())
|
365
|
+
}
|
366
|
+
|
367
|
+
#[allow(clippy::too_many_arguments)]
|
368
|
+
pub fn sink_csv(
|
369
|
+
&self,
|
370
|
+
path: PathBuf,
|
371
|
+
include_bom: bool,
|
372
|
+
include_header: bool,
|
373
|
+
separator: u8,
|
374
|
+
line_terminator: String,
|
375
|
+
quote_char: u8,
|
376
|
+
batch_size: Wrap<NonZeroUsize>,
|
377
|
+
datetime_format: Option<String>,
|
378
|
+
date_format: Option<String>,
|
379
|
+
time_format: Option<String>,
|
380
|
+
float_precision: Option<usize>,
|
381
|
+
null_value: Option<String>,
|
382
|
+
quote_style: Option<Wrap<QuoteStyle>>,
|
383
|
+
maintain_order: bool,
|
384
|
+
) -> RbResult<()> {
|
385
|
+
let quote_style = quote_style.map_or(QuoteStyle::default(), |wrap| wrap.0);
|
386
|
+
let null_value = null_value.unwrap_or(SerializeOptions::default().null);
|
387
|
+
|
388
|
+
let serialize_options = SerializeOptions {
|
389
|
+
date_format,
|
390
|
+
time_format,
|
391
|
+
datetime_format,
|
392
|
+
float_precision,
|
393
|
+
separator,
|
394
|
+
quote_char,
|
395
|
+
null: null_value,
|
396
|
+
line_terminator,
|
397
|
+
quote_style,
|
398
|
+
};
|
399
|
+
|
400
|
+
let options = CsvWriterOptions {
|
401
|
+
include_bom,
|
402
|
+
include_header,
|
403
|
+
maintain_order,
|
404
|
+
batch_size: batch_size.0,
|
405
|
+
serialize_options,
|
406
|
+
};
|
407
|
+
|
408
|
+
let ldf = self.ldf.clone();
|
409
|
+
ldf.sink_csv(path, options).map_err(RbPolarsErr::from)?;
|
410
|
+
Ok(())
|
411
|
+
}
|
412
|
+
|
413
|
+
pub fn sink_json(&self, path: PathBuf, maintain_order: bool) -> RbResult<()> {
|
414
|
+
let options = JsonWriterOptions { maintain_order };
|
415
|
+
|
416
|
+
let ldf = self.ldf.clone();
|
417
|
+
ldf.sink_json(path, options).map_err(RbPolarsErr::from)?;
|
418
|
+
Ok(())
|
419
|
+
}
|
420
|
+
|
307
421
|
pub fn fetch(&self, n_rows: usize) -> RbResult<RbDataFrame> {
|
308
422
|
let ldf = self.ldf.clone();
|
309
423
|
let df = ldf.fetch(n_rows).map_err(RbPolarsErr::from)?;
|
@@ -321,6 +435,12 @@ impl RbLazyFrame {
|
|
321
435
|
Ok(ldf.select(exprs).into())
|
322
436
|
}
|
323
437
|
|
438
|
+
pub fn select_seq(&self, exprs: RArray) -> RbResult<Self> {
|
439
|
+
let ldf = self.ldf.clone();
|
440
|
+
let exprs = rb_exprs_to_exprs(exprs)?;
|
441
|
+
Ok(ldf.select_seq(exprs).into())
|
442
|
+
}
|
443
|
+
|
324
444
|
pub fn group_by(&self, by: RArray, maintain_order: bool) -> RbResult<RbLazyGroupBy> {
|
325
445
|
let ldf = self.ldf.clone();
|
326
446
|
let by = rb_exprs_to_exprs(by)?;
|
@@ -334,7 +454,7 @@ impl RbLazyFrame {
|
|
334
454
|
})
|
335
455
|
}
|
336
456
|
|
337
|
-
pub fn
|
457
|
+
pub fn rolling(
|
338
458
|
&self,
|
339
459
|
index_column: &RbExpr,
|
340
460
|
period: String,
|
@@ -346,7 +466,7 @@ impl RbLazyFrame {
|
|
346
466
|
let closed_window = closed.0;
|
347
467
|
let ldf = self.ldf.clone();
|
348
468
|
let by = rb_exprs_to_exprs(by)?;
|
349
|
-
let lazy_gb = ldf.
|
469
|
+
let lazy_gb = ldf.rolling(
|
350
470
|
index_column.inner.clone(),
|
351
471
|
by,
|
352
472
|
RollingGroupOptions {
|
@@ -459,6 +579,7 @@ impl RbLazyFrame {
|
|
459
579
|
right_on: RArray,
|
460
580
|
allow_parallel: bool,
|
461
581
|
force_parallel: bool,
|
582
|
+
join_nulls: bool,
|
462
583
|
how: Wrap<JoinType>,
|
463
584
|
suffix: String,
|
464
585
|
) -> RbResult<Self> {
|
@@ -474,17 +595,28 @@ impl RbLazyFrame {
|
|
474
595
|
.right_on(right_on)
|
475
596
|
.allow_parallel(allow_parallel)
|
476
597
|
.force_parallel(force_parallel)
|
598
|
+
.join_nulls(join_nulls)
|
477
599
|
.how(how.0)
|
478
600
|
.suffix(suffix)
|
479
601
|
.finish()
|
480
602
|
.into())
|
481
603
|
}
|
482
604
|
|
605
|
+
pub fn with_column(&self, expr: &RbExpr) -> Self {
|
606
|
+
let ldf = self.ldf.clone();
|
607
|
+
ldf.with_column(expr.inner.clone()).into()
|
608
|
+
}
|
609
|
+
|
483
610
|
pub fn with_columns(&self, exprs: RArray) -> RbResult<Self> {
|
484
611
|
let ldf = self.ldf.clone();
|
485
612
|
Ok(ldf.with_columns(rb_exprs_to_exprs(exprs)?).into())
|
486
613
|
}
|
487
614
|
|
615
|
+
pub fn with_columns_seq(&self, exprs: RArray) -> RbResult<Self> {
|
616
|
+
let ldf = self.ldf.clone();
|
617
|
+
Ok(ldf.with_columns_seq(rb_exprs_to_exprs(exprs)?).into())
|
618
|
+
}
|
619
|
+
|
488
620
|
pub fn rename(&self, existing: Vec<String>, new: Vec<String>) -> Self {
|
489
621
|
let ldf = self.ldf.clone();
|
490
622
|
ldf.rename(existing, new).into()
|
@@ -569,6 +701,11 @@ impl RbLazyFrame {
|
|
569
701
|
Ok(ldf.explode(column).into())
|
570
702
|
}
|
571
703
|
|
704
|
+
pub fn null_count(&self) -> Self {
|
705
|
+
let ldf = self.ldf.clone();
|
706
|
+
ldf.null_count().into()
|
707
|
+
}
|
708
|
+
|
572
709
|
pub fn unique(
|
573
710
|
&self,
|
574
711
|
maintain_order: bool,
|
@@ -619,14 +756,18 @@ impl RbLazyFrame {
|
|
619
756
|
ldf.melt(args).into()
|
620
757
|
}
|
621
758
|
|
622
|
-
pub fn
|
759
|
+
pub fn with_row_index(&self, name: String, offset: Option<IdxSize>) -> Self {
|
623
760
|
let ldf = self.ldf.clone();
|
624
|
-
ldf.
|
761
|
+
ldf.with_row_index(&name, offset).into()
|
625
762
|
}
|
626
763
|
|
627
|
-
pub fn
|
764
|
+
pub fn drop(&self, cols: Vec<String>) -> Self {
|
628
765
|
let ldf = self.ldf.clone();
|
629
|
-
ldf.
|
766
|
+
ldf.drop(cols).into()
|
767
|
+
}
|
768
|
+
|
769
|
+
pub fn cast_all(&self, dtype: Wrap<DataType>, strict: bool) -> Self {
|
770
|
+
self.ldf.clone().cast_all(dtype.0, strict).into()
|
630
771
|
}
|
631
772
|
|
632
773
|
pub fn clone(&self) -> Self {
|
@@ -668,4 +809,18 @@ impl RbLazyFrame {
|
|
668
809
|
pub fn width(&self) -> RbResult<usize> {
|
669
810
|
Ok(self.get_schema()?.len())
|
670
811
|
}
|
812
|
+
|
813
|
+
pub fn count(&self) -> Self {
|
814
|
+
let ldf = self.ldf.clone();
|
815
|
+
ldf.count().into()
|
816
|
+
}
|
817
|
+
|
818
|
+
pub fn merge_sorted(&self, other: &Self, key: String) -> RbResult<Self> {
|
819
|
+
let out = self
|
820
|
+
.ldf
|
821
|
+
.clone()
|
822
|
+
.merge_sorted(other.ldf.clone(), &key)
|
823
|
+
.map_err(RbPolarsErr::from)?;
|
824
|
+
Ok(out.into())
|
825
|
+
}
|
671
826
|
}
|