Path: blob/main/crates/polars-core/src/frame/upstream_traits.rs
6940 views
use std::ops::{Index, Range, RangeFrom, RangeFull, RangeInclusive, RangeTo, RangeToInclusive};12use arrow::record_batch::RecordBatchT;34use crate::prelude::*;56impl FromIterator<Series> for DataFrame {7/// # Panics8///9/// Panics if Series have different lengths.10fn from_iter<T: IntoIterator<Item = Series>>(iter: T) -> Self {11let v = iter.into_iter().map(Column::from).collect();12DataFrame::new(v).expect("could not create DataFrame from iterator")13}14}1516impl FromIterator<Column> for DataFrame {17/// # Panics18///19/// Panics if Column have different lengths.20fn from_iter<T: IntoIterator<Item = Column>>(iter: T) -> Self {21let v = iter.into_iter().collect();22DataFrame::new(v).expect("could not create DataFrame from iterator")23}24}2526impl TryExtend<RecordBatchT<Box<dyn Array>>> for DataFrame {27fn try_extend<I: IntoIterator<Item = RecordBatchT<Box<dyn Array>>>>(28&mut self,29iter: I,30) -> PolarsResult<()> {31for record_batch in iter {32self.append_record_batch(record_batch)?;33}3435Ok(())36}37}3839impl TryExtend<PolarsResult<RecordBatchT<Box<dyn Array>>>> for DataFrame {40fn try_extend<I: IntoIterator<Item = PolarsResult<RecordBatchT<Box<dyn Array>>>>>(41&mut self,42iter: I,43) -> PolarsResult<()> {44for record_batch in iter {45self.append_record_batch(record_batch?)?;46}4748Ok(())49}50}5152impl Index<usize> for DataFrame {53type Output = Column;5455fn index(&self, index: usize) -> &Self::Output {56&self.columns[index]57}58}5960macro_rules! impl_ranges {61($range_type:ty) => {62impl Index<$range_type> for DataFrame {63type Output = [Column];6465fn index(&self, index: $range_type) -> &Self::Output {66&self.columns[index]67}68}69};70}7172impl_ranges!(Range<usize>);73impl_ranges!(RangeInclusive<usize>);74impl_ranges!(RangeFrom<usize>);75impl_ranges!(RangeTo<usize>);76impl_ranges!(RangeToInclusive<usize>);77impl_ranges!(RangeFull);7879// we don't implement Borrow<str> or AsRef<str> as upstream crates may add impl of trait for usize.80impl Index<&str> for DataFrame {81type Output = Column;8283fn index(&self, index: &str) -> &Self::Output {84let idx = self.check_name_to_idx(index).unwrap();85&self.columns[idx]86}87}888990