polars_core/chunked_array/ops/
nulls.rs1use polars_arrow::bitmap::Bitmap;
2
3use super::*;
4
5impl<T: PolarsDataType> ChunkedArray<T> {
6 pub fn is_null(&self) -> BooleanChunked {
8 if !self.has_nulls() {
9 return BooleanChunked::full(self.name().clone(), false, self.len());
10 }
11 is_null(self.name().clone(), &self.chunks)
13 }
14
15 pub fn is_not_null(&self) -> BooleanChunked {
17 if self.null_count() == 0 {
18 return BooleanChunked::full(self.name().clone(), true, self.len());
19 }
20 is_not_null(self.name().clone(), &self.chunks)
22 }
23}
24
25pub fn is_not_null(name: PlSmallStr, chunks: &[ArrayRef]) -> BooleanChunked {
26 let chunks = chunks.iter().map(|arr| {
27 let bitmap = arr
28 .validity()
29 .cloned()
30 .unwrap_or_else(|| !(&Bitmap::new_zeroed(arr.len())));
31 BooleanArray::from_data_default(bitmap, None)
32 });
33 BooleanChunked::from_chunk_iter(name, chunks)
34}
35
36pub fn is_null(name: PlSmallStr, chunks: &[ArrayRef]) -> BooleanChunked {
37 let chunks = chunks.iter().map(|arr| {
38 let bitmap = arr
39 .validity()
40 .map(|bitmap| !bitmap)
41 .unwrap_or_else(|| Bitmap::new_zeroed(arr.len()));
42 BooleanArray::from_data_default(bitmap, None)
43 });
44 BooleanChunked::from_chunk_iter(name, chunks)
45}
46
47pub fn replace_non_null(name: PlSmallStr, chunks: &[ArrayRef], default: bool) -> BooleanChunked {
48 BooleanChunked::from_chunk_iter(
49 name,
50 chunks.iter().map(|el| {
51 BooleanArray::from_data_default(
52 Bitmap::new_with_value(default, el.len()),
53 el.validity().cloned(),
54 )
55 }),
56 )
57}