Path: blob/main/crates/polars-core/src/chunked_array/float.rs
6940 views
use arrow::legacy::kernels::set::set_at_nulls;1use num_traits::Float;2use polars_utils::total_ord::{canonical_f32, canonical_f64};34use crate::prelude::arity::unary_elementwise_values;5use crate::prelude::*;67impl<T> ChunkedArray<T>8where9T: PolarsFloatType,10T::Native: Float,11{12pub fn is_nan(&self) -> BooleanChunked {13unary_elementwise_values(self, |x| x.is_nan())14}15pub fn is_not_nan(&self) -> BooleanChunked {16unary_elementwise_values(self, |x| !x.is_nan())17}18pub fn is_finite(&self) -> BooleanChunked {19unary_elementwise_values(self, |x| x.is_finite())20}21pub fn is_infinite(&self) -> BooleanChunked {22unary_elementwise_values(self, |x| x.is_infinite())23}2425#[must_use]26/// Convert missing values to `NaN` values.27pub fn none_to_nan(&self) -> Self {28let chunks = self29.downcast_iter()30.map(|arr| set_at_nulls(arr, T::Native::nan()));31ChunkedArray::from_chunk_iter(self.name().clone(), chunks)32}33}3435pub trait Canonical {36fn canonical(self) -> Self;37}3839impl Canonical for f32 {40#[inline]41fn canonical(self) -> Self {42canonical_f32(self)43}44}4546impl Canonical for f64 {47#[inline]48fn canonical(self) -> Self {49canonical_f64(self)50}51}5253impl<T> ChunkedArray<T>54where55T: PolarsFloatType,56T::Native: Float + Canonical,57{58pub fn to_canonical(&self) -> Self {59unary_elementwise_values(self, |v| v.canonical())60}61}626364