Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-core/src/frame/upstream_traits.rs
6940 views
1
use std::ops::{Index, Range, RangeFrom, RangeFull, RangeInclusive, RangeTo, RangeToInclusive};
2
3
use arrow::record_batch::RecordBatchT;
4
5
use crate::prelude::*;
6
7
impl FromIterator<Series> for DataFrame {
8
/// # Panics
9
///
10
/// Panics if Series have different lengths.
11
fn from_iter<T: IntoIterator<Item = Series>>(iter: T) -> Self {
12
let v = iter.into_iter().map(Column::from).collect();
13
DataFrame::new(v).expect("could not create DataFrame from iterator")
14
}
15
}
16
17
impl FromIterator<Column> for DataFrame {
18
/// # Panics
19
///
20
/// Panics if Column have different lengths.
21
fn from_iter<T: IntoIterator<Item = Column>>(iter: T) -> Self {
22
let v = iter.into_iter().collect();
23
DataFrame::new(v).expect("could not create DataFrame from iterator")
24
}
25
}
26
27
impl TryExtend<RecordBatchT<Box<dyn Array>>> for DataFrame {
28
fn try_extend<I: IntoIterator<Item = RecordBatchT<Box<dyn Array>>>>(
29
&mut self,
30
iter: I,
31
) -> PolarsResult<()> {
32
for record_batch in iter {
33
self.append_record_batch(record_batch)?;
34
}
35
36
Ok(())
37
}
38
}
39
40
impl TryExtend<PolarsResult<RecordBatchT<Box<dyn Array>>>> for DataFrame {
41
fn try_extend<I: IntoIterator<Item = PolarsResult<RecordBatchT<Box<dyn Array>>>>>(
42
&mut self,
43
iter: I,
44
) -> PolarsResult<()> {
45
for record_batch in iter {
46
self.append_record_batch(record_batch?)?;
47
}
48
49
Ok(())
50
}
51
}
52
53
impl Index<usize> for DataFrame {
54
type Output = Column;
55
56
fn index(&self, index: usize) -> &Self::Output {
57
&self.columns[index]
58
}
59
}
60
61
macro_rules! impl_ranges {
62
($range_type:ty) => {
63
impl Index<$range_type> for DataFrame {
64
type Output = [Column];
65
66
fn index(&self, index: $range_type) -> &Self::Output {
67
&self.columns[index]
68
}
69
}
70
};
71
}
72
73
impl_ranges!(Range<usize>);
74
impl_ranges!(RangeInclusive<usize>);
75
impl_ranges!(RangeFrom<usize>);
76
impl_ranges!(RangeTo<usize>);
77
impl_ranges!(RangeToInclusive<usize>);
78
impl_ranges!(RangeFull);
79
80
// we don't implement Borrow<str> or AsRef<str> as upstream crates may add impl of trait for usize.
81
impl Index<&str> for DataFrame {
82
type Output = Column;
83
84
fn index(&self, index: &str) -> &Self::Output {
85
let idx = self.check_name_to_idx(index).unwrap();
86
&self.columns[idx]
87
}
88
}
89
90