From 6c67e54b3cd3a35b25ec9d57ab719e67ef710e81 Mon Sep 17 00:00:00 2001 From: philss Date: Tue, 25 Jul 2023 19:55:26 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20elixir-e?= =?UTF-8?q?xplorer/explorer@12e38f248ba032ea75f21f6387901db456f1ee03=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Explorer.Backend.html | 4 +- Explorer.DataFrame.html | 3028 ++++++++++++++++++------------------ Explorer.Datasets.html | 6 +- Explorer.Query.html | 266 ++-- Explorer.Series.html | 3044 ++++++++++++++++++------------------- Explorer.TensorFrame.html | 80 +- Explorer.epub | Bin 405726 -> 405717 bytes Explorer.html | 54 +- changelog.html | 18 +- exploring_explorer.html | 100 +- 10 files changed, 3300 insertions(+), 3300 deletions(-) diff --git a/Explorer.Backend.html b/Explorer.Backend.html index e7189d4a3..df8d08953 100644 --- a/Explorer.Backend.html +++ b/Explorer.Backend.html @@ -216,9 +216,9 @@

put(backend)

Examples -
iex> Explorer.Backend.put(Lib.CustomBackend)
+
iex> Explorer.Backend.put(Lib.CustomBackend)
 Explorer.PolarsBackend
-iex> Explorer.Backend.get()
+iex> Explorer.Backend.get()
 Lib.CustomBackend
diff --git a/Explorer.DataFrame.html b/Explorer.DataFrame.html index f8597967a..af9e26687 100644 --- a/Explorer.DataFrame.html +++ b/Explorer.DataFrame.html @@ -113,38 +113,38 @@

The DataFrame struct and API.

Dataframes are two-dimensional tabular data structures similar to a spreadsheet. -For example, the Iris dataset:

iex> Explorer.Datasets.iris()
-#Explorer.DataFrame<
-  Polars[150 x 5]
-  sepal_length float [5.1, 4.9, 4.7, 4.6, 5.0, ...]
-  sepal_width float [3.5, 3.0, 3.2, 3.1, 3.6, ...]
-  petal_length float [1.4, 1.4, 1.3, 1.5, 1.4, ...]
-  petal_width float [0.2, 0.2, 0.2, 0.2, 0.2, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
->

This dataframe has 150 rows and five columns. Each column is an Explorer.Series -of the same size (150):

iex> df = Explorer.Datasets.iris()
-iex> df["sepal_length"]
-#Explorer.Series<
-  Polars[150]
-  float [5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, 4.8, 4.8, 4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5.0, 5.0, 5.2, 5.2, 4.7, 4.8, 5.4, 5.2, 5.5, 4.9, 5.0, 5.5, 4.9, 4.4, 5.1, 5.0, 4.5, 4.4, 5.0, 5.1, 4.8, 5.1, 4.6, 5.3, 5.0, ...]
->

+For example, the Iris dataset:

iex> Explorer.Datasets.iris()
+#Explorer.DataFrame<
+  Polars[150 x 5]
+  sepal_length float [5.1, 4.9, 4.7, 4.6, 5.0, ...]
+  sepal_width float [3.5, 3.0, 3.2, 3.1, 3.6, ...]
+  petal_length float [1.4, 1.4, 1.3, 1.5, 1.4, ...]
+  petal_width float [0.2, 0.2, 0.2, 0.2, 0.2, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+>

This dataframe has 150 rows and five columns. Each column is an Explorer.Series +of the same size (150):

iex> df = Explorer.Datasets.iris()
+iex> df["sepal_length"]
+#Explorer.Series<
+  Polars[150]
+  float [5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, 4.8, 4.8, 4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1, 5.4, 5.1, 4.6, 5.1, 4.8, 5.0, 5.0, 5.2, 5.2, 4.7, 4.8, 5.4, 5.2, 5.5, 4.9, 5.0, 5.5, 4.9, 4.4, 5.1, 5.0, 4.5, 4.4, 5.0, 5.1, 4.8, 5.1, 4.6, 5.3, 5.0, ...]
+>

Creating dataframes

Dataframes can be created from normal Elixir terms. The main way you might do this is -with the new/1 function. For example:

iex> Explorer.DataFrame.new(a: ["a", "b"], b: [1, 2])
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  a string ["a", "b"]
-  b integer [1, 2]
->

Or with a list of maps:

iex> Explorer.DataFrame.new([%{"col1" => "a", "col2" => 1}, %{"col1" => "b", "col2" => 2}])
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  col1 string ["a", "b"]
-  col2 integer [1, 2]
->

+with the new/1 function. For example:

iex> Explorer.DataFrame.new(a: ["a", "b"], b: [1, 2])
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  a string ["a", "b"]
+  b integer [1, 2]
+>

Or with a list of maps:

iex> Explorer.DataFrame.new([%{"col1" => "a", "col2" => 1}, %{"col1" => "b", "col2" => 2}])
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  col1 string ["a", "b"]
+  col2 integer [1, 2]
+>

Verbs @@ -182,16 +182,16 @@

Explorer supports reading and writing of:

The convention Explorer uses is to have from_* and to_* functions to read and write to files in the formats above. load_* and dump_* versions are also available to read and write those formats directly in memory.

Files can be fetched from local or remote file system, such as S3, using the following formats:

# path to a file in disk
-Explorer.DataFrame.from_parquet("/path/to/file.parquet")
+Explorer.DataFrame.from_parquet("/path/to/file.parquet")
 
 # path to a URL schema (with optional configuration)
-Explorer.DataFrame.from_parquet("s3://bucket/file.parquet", config: FSS.S3.config_from_system_env())
+Explorer.DataFrame.from_parquet("s3://bucket/file.parquet", config: FSS.S3.config_from_system_env())
 
 # it's possible to configure using keyword lists
-Explorer.DataFrame.from_parquet("s3://bucket/file.parquet", config: [access_key_id: "my-key", secret_access_key: "my-secret"])
+Explorer.DataFrame.from_parquet("s3://bucket/file.parquet", config: [access_key_id: "my-key", secret_access_key: "my-secret"])
 
 # a FSS entry (it already includes its config)
-Explorer.DataFrame.from_parquet(FSS.S3.parse("s3://bucket/file.parquet"))

The :config option of from_* functions is only required if the filename is a path +Explorer.DataFrame.from_parquet(FSS.S3.parse("s3://bucket/file.parquet"))

The :config option of from_* functions is only required if the filename is a path to a remote resource. In case it's a FSS entry, the requirement is that the config is passed inside the entry struct.

@@ -203,40 +203,40 @@

forth accept a single or multiple columns as arguments. The columns can be specified in a variety of formats, which we describe below.

Explorer.DataFrame also implements the Access behaviour (also known as the brackets syntax). This should be familiar for users coming from other language with dataframes -such as R or Python. For example:

iex> df = Explorer.Datasets.wine()
-iex> df["class"]
-#Explorer.Series<
-  Polars[178]
-  integer [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...]
->

Accessing the dataframe with a column name either as a string or an atom, will return -the column. You can also pass an integer representing the column order:

iex> df = Explorer.Datasets.wine()
-iex> df[0]
-#Explorer.Series<
-  Polars[178]
-  integer [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...]
->

You can also pass a list, a range, or a regex to return a dataframe matching -the given data type. For example, by passing a list:

iex> df = Explorer.Datasets.wine()
-iex> df[["class", "hue"]]
-#Explorer.DataFrame<
-  Polars[178 x 2]
-  class integer [1, 1, 1, 1, 1, ...]
-  hue float [1.04, 1.05, 1.03, 0.86, 1.04, ...]
->

Or a range for the given positions:

iex> df = Explorer.Datasets.wine()
-iex> df[0..2]
-#Explorer.DataFrame<
-  Polars[178 x 3]
-  class integer [1, 1, 1, 1, 1, ...]
-  alcohol float [14.23, 13.2, 13.16, 14.37, 13.24, ...]
-  malic_acid float [1.71, 1.78, 2.36, 1.95, 2.59, ...]
->

Or a regex to keep only columns matching a given pattern:

iex> df = Explorer.Datasets.wine()
-iex> df[~r/(class|hue)/]
-#Explorer.DataFrame<
-  Polars[178 x 2]
-  class integer [1, 1, 1, 1, 1, ...]
-  hue float [1.04, 1.05, 1.03, 0.86, 1.04, ...]
->

Given you can also access a series using its index, you can use -multiple accesses to select a column and row at the same time:

iex> df = Explorer.Datasets.wine()
-iex> df["class"][3]
+such as R or Python. For example:

iex> df = Explorer.Datasets.wine()
+iex> df["class"]
+#Explorer.Series<
+  Polars[178]
+  integer [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...]
+>

Accessing the dataframe with a column name either as a string or an atom, will return +the column. You can also pass an integer representing the column order:

iex> df = Explorer.Datasets.wine()
+iex> df[0]
+#Explorer.Series<
+  Polars[178]
+  integer [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...]
+>

You can also pass a list, a range, or a regex to return a dataframe matching +the given data type. For example, by passing a list:

iex> df = Explorer.Datasets.wine()
+iex> df[["class", "hue"]]
+#Explorer.DataFrame<
+  Polars[178 x 2]
+  class integer [1, 1, 1, 1, 1, ...]
+  hue float [1.04, 1.05, 1.03, 0.86, 1.04, ...]
+>

Or a range for the given positions:

iex> df = Explorer.Datasets.wine()
+iex> df[0..2]
+#Explorer.DataFrame<
+  Polars[178 x 3]
+  class integer [1, 1, 1, 1, 1, ...]
+  alcohol float [14.23, 13.2, 13.16, 14.37, 13.24, ...]
+  malic_acid float [1.71, 1.78, 2.36, 1.95, 2.59, ...]
+>

Or a regex to keep only columns matching a given pattern:

iex> df = Explorer.Datasets.wine()
+iex> df[~r/(class|hue)/]
+#Explorer.DataFrame<
+  Polars[178 x 2]
+  class integer [1, 1, 1, 1, 1, ...]
+  hue float [1.04, 1.05, 1.03, 0.86, 1.04, ...]
+>

Given you can also access a series using its index, you can use +multiple accesses to select a column and row at the same time:

iex> df = Explorer.Datasets.wine()
+iex> df["class"][3]
 1
@@ -1603,15 +1603,15 @@

Series can be given either as keyword lists or maps -where the keys are the name and the values are series:

iex> Explorer.DataFrame.new(%{
-...>   floats: Explorer.Series.from_list([1.0, 2.0]),
-...>   ints: Explorer.Series.from_list([1, nil])
-...> })
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  floats float [1.0, 2.0]
-  ints integer [1, nil]
->

+where the keys are the name and the values are series:

iex> Explorer.DataFrame.new(%{
+...>   floats: Explorer.Series.from_list([1.0, 2.0]),
+...>   ints: Explorer.Series.from_list([1, nil])
+...> })
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  floats float [1.0, 2.0]
+  ints integer [1, nil]
+>

From tensors @@ -1619,77 +1619,77 @@

To create dataframe from tensors, you can pass a matrix as argument. Each matrix column becomes a dataframe column with names x1, x2, x3, -etc:

iex> Explorer.DataFrame.new(Nx.tensor([
-...>   [1, 2, 3],
-...>   [4, 5, 6]
-...> ]))
-#Explorer.DataFrame<
-  Polars[2 x 3]
-  x1 integer [1, 4]
-  x2 integer [2, 5]
-  x3 integer [3, 6]
->

Explorer expects tensors to have certain types, so you may need to cast -the data accordingly. See Explorer.Series.from_tensor/2 for more info.

You can also pass a keyword list or maps of vectors (rank 1 tensors):

iex> Explorer.DataFrame.new(%{
-...>   floats: Nx.tensor([1.0, 2.0], type: :f64),
-...>   ints: Nx.tensor([3, 4])
-...> })
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  floats float [1.0, 2.0]
-  ints integer [3, 4]
->

Use dtypes to force a particular representation:

iex> Explorer.DataFrame.new([
-...>   floats: Nx.tensor([1.0, 2.0], type: :f64),
-...>   times: Nx.tensor([3_000, 4_000])
-...> ], dtypes: [times: :time])
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  floats float [1.0, 2.0]
-  times time [00:00:00.000003, 00:00:00.000004]
->

+etc:

iex> Explorer.DataFrame.new(Nx.tensor([
+...>   [1, 2, 3],
+...>   [4, 5, 6]
+...> ]))
+#Explorer.DataFrame<
+  Polars[2 x 3]
+  x1 integer [1, 4]
+  x2 integer [2, 5]
+  x3 integer [3, 6]
+>

Explorer expects tensors to have certain types, so you may need to cast +the data accordingly. See Explorer.Series.from_tensor/2 for more info.

You can also pass a keyword list or maps of vectors (rank 1 tensors):

iex> Explorer.DataFrame.new(%{
+...>   floats: Nx.tensor([1.0, 2.0], type: :f64),
+...>   ints: Nx.tensor([3, 4])
+...> })
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  floats float [1.0, 2.0]
+  ints integer [3, 4]
+>

Use dtypes to force a particular representation:

iex> Explorer.DataFrame.new([
+...>   floats: Nx.tensor([1.0, 2.0], type: :f64),
+...>   times: Nx.tensor([3_000, 4_000])
+...> ], dtypes: [times: :time])
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  floats float [1.0, 2.0]
+  times time [00:00:00.000003, 00:00:00.000004]
+>

From tabular

Tabular data can be either columnar or row-based. -Let's start with column data:

iex> Explorer.DataFrame.new(%{floats: [1.0, 2.0], ints: [1, nil]})
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  floats float [1.0, 2.0]
-  ints integer [1, nil]
->
-
-iex> Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, nil])
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  floats float [1.0, 2.0]
-  ints integer [1, nil]
->
-
-iex> Explorer.DataFrame.new([floats: [1.0, 2.0], ints: [1, nil], binaries: [<<239, 191, 19>>, nil]], dtypes: [{:binaries, :binary}])
-#Explorer.DataFrame<
-  Polars[2 x 3]
-  floats float [1.0, 2.0]
-  ints integer [1, nil]
-  binaries binary [<<239, 191, 19>>, nil]
->
-
-iex> Explorer.DataFrame.new(%{floats: [1.0, 2.0], ints: [1, "wrong"]})
-** (ArgumentError) cannot create series "ints": the value "wrong" does not match the inferred series dtype :integer

From row data:

iex> rows = [%{id: 1, name: "JosƩ"}, %{id: 2, name: "Christopher"}, %{id: 3, name: "Cristine"}]
-iex> Explorer.DataFrame.new(rows)
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  id integer [1, 2, 3]
-  name string ["JosƩ", "Christopher", "Cristine"]
->
-
-iex> rows = [[id: 1, name: "JosƩ"], [id: 2, name: "Christopher"], [id: 3, name: "Cristine"]]
-iex> Explorer.DataFrame.new(rows)
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  id integer [1, 2, 3]
-  name string ["JosƩ", "Christopher", "Cristine"]
->
+Let's start with column data:

iex> Explorer.DataFrame.new(%{floats: [1.0, 2.0], ints: [1, nil]})
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  floats float [1.0, 2.0]
+  ints integer [1, nil]
+>
+
+iex> Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, nil])
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  floats float [1.0, 2.0]
+  ints integer [1, nil]
+>
+
+iex> Explorer.DataFrame.new([floats: [1.0, 2.0], ints: [1, nil], binaries: [<<239, 191, 19>>, nil]], dtypes: [{:binaries, :binary}])
+#Explorer.DataFrame<
+  Polars[2 x 3]
+  floats float [1.0, 2.0]
+  ints integer [1, nil]
+  binaries binary [<<239, 191, 19>>, nil]
+>
+
+iex> Explorer.DataFrame.new(%{floats: [1.0, 2.0], ints: [1, "wrong"]})
+** (ArgumentError) cannot create series "ints": the value "wrong" does not match the inferred series dtype :integer

From row data:

iex> rows = [%{id: 1, name: "JosƩ"}, %{id: 2, name: "Christopher"}, %{id: 3, name: "Cristine"}]
+iex> Explorer.DataFrame.new(rows)
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  id integer [1, 2, 3]
+  name string ["JosƩ", "Christopher", "Cristine"]
+>
+
+iex> rows = [[id: 1, name: "JosƩ"], [id: 2, name: "Christopher"], [id: 3, name: "Cristine"]]
+iex> Explorer.DataFrame.new(rows)
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  id integer [1, 2, 3]
+  name string ["JosƩ", "Christopher", "Cristine"]
+>
@@ -1735,13 +1735,13 @@

to_columns(df, opts \\ [])

Examples

-
iex> df = Explorer.DataFrame.new(ints: [1, nil], floats: [1.0, 2.0])
-iex> Explorer.DataFrame.to_columns(df)
-%{"floats" => [1.0, 2.0], "ints" => [1, nil]}
+
iex> df = Explorer.DataFrame.new(ints: [1, nil], floats: [1.0, 2.0])
+iex> Explorer.DataFrame.to_columns(df)
+%{"floats" => [1.0, 2.0], "ints" => [1, nil]}
 
-iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, nil])
-iex> Explorer.DataFrame.to_columns(df, atom_keys: true)
-%{floats: [1.0, 2.0], ints: [1, nil]}
+
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, nil]) +iex> Explorer.DataFrame.to_columns(df, atom_keys: true) +%{floats: [1.0, 2.0], ints: [1, nil]}
@@ -1815,13 +1815,13 @@

to_rows(df, opts \\ [])

Examples

-
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, nil])
-iex> Explorer.DataFrame.to_rows(df)
-[%{"floats" => 1.0, "ints" => 1}, %{"floats" => 2.0 ,"ints" => nil}]
+
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, nil])
+iex> Explorer.DataFrame.to_rows(df)
+[%{"floats" => 1.0, "ints" => 1}, %{"floats" => 2.0 ,"ints" => nil}]
 
-iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, nil])
-iex> Explorer.DataFrame.to_rows(df, atom_keys: true)
-[%{floats: 1.0, ints: 1}, %{floats: 2.0, ints: nil}]
+
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, nil]) +iex> Explorer.DataFrame.to_rows(df, atom_keys: true) +[%{floats: 1.0, ints: 1}, %{floats: 2.0, ints: nil}]
@@ -1865,13 +1865,13 @@

to_rows_stream(df, opts \\ [])

Examples -
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, nil])
-iex> Explorer.DataFrame.to_rows_stream(df) |> Enum.map(& &1)
-[%{"floats" => 1.0, "ints" => 1}, %{"floats" => 2.0 ,"ints" => nil}]
+
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, nil])
+iex> Explorer.DataFrame.to_rows_stream(df) |> Enum.map(& &1)
+[%{"floats" => 1.0, "ints" => 1}, %{"floats" => 2.0 ,"ints" => nil}]
 
-iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, nil])
-iex> Explorer.DataFrame.to_rows_stream(df, atom_keys: true) |> Enum.map(& &1)
-[%{floats: 1.0, ints: 1}, %{floats: 2.0, ints: nil}]
+
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, nil]) +iex> Explorer.DataFrame.to_rows_stream(df, atom_keys: true) |> Enum.map(& &1) +[%{floats: 1.0, ints: 1}, %{floats: 2.0, ints: nil}]
@@ -1914,12 +1914,12 @@

to_series(df, opts \\ [])

Examples -
iex> df = Explorer.DataFrame.new(ints: [1, nil], floats: [1.0, 2.0])
-iex> map = Explorer.DataFrame.to_series(df)
-iex> Explorer.Series.to_list(map["floats"])
-[1.0, 2.0]
-iex> Explorer.Series.to_list(map["ints"])
-[1, nil]
+
iex> df = Explorer.DataFrame.new(ints: [1, nil], floats: [1.0, 2.0])
+iex> map = Explorer.DataFrame.to_series(df)
+iex> Explorer.Series.to_list(map["floats"])
+[1.0, 2.0]
+iex> Explorer.Series.to_list(map["ints"])
+[1, nil]
@@ -1962,33 +1962,33 @@

arrange(df, query)

Examples -

A single column name will sort ascending by that column:

iex> df = Explorer.DataFrame.new(a: ["b", "c", "a"], b: [1, 2, 3])
-iex> Explorer.DataFrame.arrange(df, a)
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a string ["a", "b", "c"]
-  b integer [3, 1, 2]
->

You can also sort descending:

iex> df = Explorer.DataFrame.new(a: ["b", "c", "a"], b: [1, 2, 3])
-iex> Explorer.DataFrame.arrange(df, desc: a)
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a string ["c", "b", "a"]
-  b integer [2, 1, 3]
->

Sorting by more than one column sorts them in the order they are entered:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.arrange(df, asc: total, desc: country)
-#Explorer.DataFrame<
-  Polars[1094 x 10]
-  year integer [2010, 2010, 2011, 2011, 2012, ...]
-  country string ["NIUE", "TUVALU", "TUVALU", "NIUE", "NIUE", ...]
-  total integer [1, 2, 2, 2, 2, ...]
-  solid_fuel integer [0, 0, 0, 0, 0, ...]
-  liquid_fuel integer [1, 2, 2, 2, 2, ...]
-  gas_fuel integer [0, 0, 0, 0, 0, ...]
-  cement integer [0, 0, 0, 0, 0, ...]
-  gas_flaring integer [0, 0, 0, 0, 0, ...]
-  per_capita float [0.52, 0.0, 0.0, 1.04, 1.04, ...]
-  bunker_fuels integer [0, 0, 0, 0, 0, ...]
->

+

A single column name will sort ascending by that column:

iex> df = Explorer.DataFrame.new(a: ["b", "c", "a"], b: [1, 2, 3])
+iex> Explorer.DataFrame.arrange(df, a)
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a string ["a", "b", "c"]
+  b integer [3, 1, 2]
+>

You can also sort descending:

iex> df = Explorer.DataFrame.new(a: ["b", "c", "a"], b: [1, 2, 3])
+iex> Explorer.DataFrame.arrange(df, desc: a)
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a string ["c", "b", "a"]
+  b integer [2, 1, 3]
+>

Sorting by more than one column sorts them in the order they are entered:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.arrange(df, asc: total, desc: country)
+#Explorer.DataFrame<
+  Polars[1094 x 10]
+  year integer [2010, 2010, 2011, 2011, 2012, ...]
+  country string ["NIUE", "TUVALU", "TUVALU", "NIUE", "NIUE", ...]
+  total integer [1, 2, 2, 2, 2, ...]
+  solid_fuel integer [0, 0, 0, 0, 0, ...]
+  liquid_fuel integer [1, 2, 2, 2, 2, ...]
+  gas_fuel integer [0, 0, 0, 0, 0, ...]
+  cement integer [0, 0, 0, 0, 0, ...]
+  gas_flaring integer [0, 0, 0, 0, 0, ...]
+  per_capita float [0.52, 0.0, 0.0, 1.04, 1.04, ...]
+  bunker_fuels integer [0, 0, 0, 0, 0, ...]
+>

Grouped examples @@ -1999,18 +1999,18 @@

arrange(df, query)

is also a group, the sorting for that column is not going to work. It is necessary to first summarise the desired column and then arrange it.

Here is an example using the Iris dataset. We group by species and then we try to sort the dataframe by species and petal length, but only "petal length" is taken into account -because "species" is a group.

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.arrange(grouped, desc: species, asc: sepal_width)
-#Explorer.DataFrame<
-  Polars[150 x 5]
-  Groups: ["species"]
-  sepal_length float [4.5, 4.4, 4.9, 4.8, 4.3, ...]
-  sepal_width float [2.3, 2.9, 3.0, 3.0, 3.0, ...]
-  petal_length float [1.3, 1.4, 1.4, 1.4, 1.1, ...]
-  petal_width float [0.3, 0.2, 0.2, 0.1, 0.1, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
->
+because "species" is a group.

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.arrange(grouped, desc: species, asc: sepal_width)
+#Explorer.DataFrame<
+  Polars[150 x 5]
+  Groups: ["species"]
+  sepal_length float [4.5, 4.4, 4.9, 4.8, 4.3, ...]
+  sepal_width float [2.3, 2.9, 3.0, 3.0, 3.0, ...]
+  petal_length float [1.3, 1.4, 1.4, 1.4, 1.1, ...]
+  petal_width float [0.3, 0.2, 0.2, 0.1, 0.1, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+>
@@ -2052,42 +2052,42 @@

arrange_with(df, fun)

Examples

-

A single column name will sort ascending by that column:

iex> df = Explorer.DataFrame.new(a: ["b", "c", "a"], b: [1, 2, 3])
-iex> Explorer.DataFrame.arrange_with(df, &(&1["a"]))
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a string ["a", "b", "c"]
-  b integer [3, 1, 2]
->

You can also sort descending:

iex> df = Explorer.DataFrame.new(a: ["b", "c", "a"], b: [1, 2, 3])
-iex> Explorer.DataFrame.arrange_with(df, &[desc: &1["a"]])
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a string ["c", "b", "a"]
-  b integer [2, 1, 3]
->

Sorting by more than one column sorts them in the order they are entered:

iex> df = Explorer.DataFrame.new(a: [3, 1, 3], b: [2, 1, 3])
-iex> Explorer.DataFrame.arrange_with(df, &[desc: &1["a"], asc: &1["b"]])
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a integer [3, 3, 1]
-  b integer [2, 3, 1]
->

+

A single column name will sort ascending by that column:

iex> df = Explorer.DataFrame.new(a: ["b", "c", "a"], b: [1, 2, 3])
+iex> Explorer.DataFrame.arrange_with(df, &(&1["a"]))
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a string ["a", "b", "c"]
+  b integer [3, 1, 2]
+>

You can also sort descending:

iex> df = Explorer.DataFrame.new(a: ["b", "c", "a"], b: [1, 2, 3])
+iex> Explorer.DataFrame.arrange_with(df, &[desc: &1["a"]])
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a string ["c", "b", "a"]
+  b integer [2, 1, 3]
+>

Sorting by more than one column sorts them in the order they are entered:

iex> df = Explorer.DataFrame.new(a: [3, 1, 3], b: [2, 1, 3])
+iex> Explorer.DataFrame.arrange_with(df, &[desc: &1["a"], asc: &1["b"]])
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a integer [3, 3, 1]
+  b integer [2, 3, 1]
+>

Grouped examples

-
iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.arrange_with(grouped, &[desc: &1["species"], asc: &1["sepal_width"]])
-#Explorer.DataFrame<
-  Polars[150 x 5]
-  Groups: ["species"]
-  sepal_length float [4.5, 4.4, 4.9, 4.8, 4.3, ...]
-  sepal_width float [2.3, 2.9, 3.0, 3.0, 3.0, ...]
-  petal_length float [1.3, 1.4, 1.4, 1.4, 1.1, ...]
-  petal_width float [0.3, 0.2, 0.2, 0.1, 0.1, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
->
+
iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.arrange_with(grouped, &[desc: &1["species"], asc: &1["sepal_width"]])
+#Explorer.DataFrame<
+  Polars[150 x 5]
+  Groups: ["species"]
+  sepal_length float [4.5, 4.4, 4.9, 4.8, 4.3, ...]
+  sepal_width float [2.3, 2.9, 3.0, 3.0, 3.0, ...]
+  petal_length float [1.3, 1.4, 1.4, 1.4, 1.1, ...]
+  petal_width float [0.3, 0.2, 0.2, 0.1, 0.1, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+>
@@ -2129,25 +2129,25 @@

describe(df, opts \\ [])

Examples -
iex> df = Explorer.DataFrame.new(a: ["d", nil, "f"], b: [1, 2, 3], c: ["a", "b", "c"])
-iex> Explorer.DataFrame.describe(df)
-#Explorer.DataFrame<
-  Polars[9 x 4]
-  describe string ["count", "null_count", "mean", "std", "min", ...]
-  a string ["3", "1", nil, nil, "d", ...]
-  b float [3.0, 0.0, 2.0, 1.0, 1.0, ...]
-  c string ["3", "0", nil, nil, "a", ...]
->
-
-iex> df = Explorer.DataFrame.new(a: ["d", nil, "f"], b: [1, 2, 3], c: ["a", "b", "c"])
-iex> Explorer.DataFrame.describe(df, percentiles: [0.3, 0.5, 0.8])
-#Explorer.DataFrame<
-  Polars[9 x 4]
-  describe string ["count", "null_count", "mean", "std", "min", ...]
-  a string ["3", "1", nil, nil, "d", ...]
-  b float [3.0, 0.0, 2.0, 1.0, 1.0, ...]
-  c string ["3", "0", nil, nil, "a", ...]
->
+
iex> df = Explorer.DataFrame.new(a: ["d", nil, "f"], b: [1, 2, 3], c: ["a", "b", "c"])
+iex> Explorer.DataFrame.describe(df)
+#Explorer.DataFrame<
+  Polars[9 x 4]
+  describe string ["count", "null_count", "mean", "std", "min", ...]
+  a string ["3", "1", nil, nil, "d", ...]
+  b float [3.0, 0.0, 2.0, 1.0, 1.0, ...]
+  c string ["3", "0", nil, nil, "a", ...]
+>
+
+iex> df = Explorer.DataFrame.new(a: ["d", nil, "f"], b: [1, 2, 3], c: ["a", "b", "c"])
+iex> Explorer.DataFrame.describe(df, percentiles: [0.3, 0.5, 0.8])
+#Explorer.DataFrame<
+  Polars[9 x 4]
+  describe string ["count", "null_count", "mean", "std", "min", ...]
+  a string ["3", "1", nil, nil, "d", ...]
+  b float [3.0, 0.0, 2.0, 1.0, 1.0, ...]
+  c string ["3", "0", nil, nil, "a", ...]
+>
@@ -2182,36 +2182,36 @@

discard(df, columns_or_column)

Examples -
iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
-iex> Explorer.DataFrame.discard(df, ["b"])
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  a string ["a", "b", "c"]
->
-
-iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3], c: [4, 5, 6])
-iex> Explorer.DataFrame.discard(df, ["a", "b"])
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  c integer [4, 5, 6]
->

Ranges, regexes, and functions are also accepted in column names, as in select/2.

+
iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
+iex> Explorer.DataFrame.discard(df, ["b"])
+#Explorer.DataFrame<
+  Polars[3 x 1]
+  a string ["a", "b", "c"]
+>
+
+iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3], c: [4, 5, 6])
+iex> Explorer.DataFrame.discard(df, ["a", "b"])
+#Explorer.DataFrame<
+  Polars[3 x 1]
+  c integer [4, 5, 6]
+>

Ranges, regexes, and functions are also accepted in column names, as in select/2.

Grouped examples

-

You cannot discard grouped columns. You need to ungroup before removing them:

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.discard(grouped, ["species"])
-#Explorer.DataFrame<
-  Polars[150 x 5]
-  Groups: ["species"]
-  sepal_length float [5.1, 4.9, 4.7, 4.6, 5.0, ...]
-  sepal_width float [3.5, 3.0, 3.2, 3.1, 3.6, ...]
-  petal_length float [1.4, 1.4, 1.3, 1.5, 1.4, ...]
-  petal_width float [0.2, 0.2, 0.2, 0.2, 0.2, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
->
+

You cannot discard grouped columns. You need to ungroup before removing them:

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.discard(grouped, ["species"])
+#Explorer.DataFrame<
+  Polars[150 x 5]
+  Groups: ["species"]
+  sepal_length float [5.1, 4.9, 4.7, 4.6, 5.0, ...]
+  sepal_width float [3.5, 3.0, 3.2, 3.1, 3.6, ...]
+  petal_length float [1.4, 1.4, 1.3, 1.5, 1.4, ...]
+  petal_width float [0.2, 0.2, 0.2, 0.2, 0.2, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+>
@@ -2256,42 +2256,42 @@

distinct(df, columns \\ 0..-1//1, opts \\ [ Examples

-

By default will return unique values of the requested columns:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.distinct(df, ["year", "country"])
-#Explorer.DataFrame<
-  Polars[1094 x 2]
-  year integer [2010, 2010, 2010, 2010, 2010, ...]
-  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
->

If keep_all is set to true, then the first value of each column not in the requested -columns will be returned:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.distinct(df, ["year", "country"], keep_all: true)
-#Explorer.DataFrame<
-  Polars[1094 x 10]
-  year integer [2010, 2010, 2010, 2010, 2010, ...]
-  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
-  total integer [2308, 1254, 32500, 141, 7924, ...]
-  solid_fuel integer [627, 117, 332, 0, 0, ...]
-  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
-  gas_fuel integer [74, 7, 14565, 0, 374, ...]
-  cement integer [5, 177, 2598, 0, 204, ...]
-  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
-  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
-  bunker_fuels integer [9, 7, 663, 0, 321, ...]
->

A callback on the dataframe's names can be passed instead of a list (like select/2):

iex> df = Explorer.DataFrame.new(x1: [1, 3, 3], x2: ["a", "c", "c"], y1: [1, 2, 3])
-iex> Explorer.DataFrame.distinct(df, &String.starts_with?(&1, "x"))
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  x1 integer [1, 3]
-  x2 string ["a", "c"]
->

If the dataframe has groups, then the columns of each group will be added to the distinct columns:

iex> df = Explorer.DataFrame.new(x1: [1, 3, 3], x2: ["a", "c", "c"], y1: [1, 2, 3])
-iex> df = Explorer.DataFrame.group_by(df, "x1")
-iex> Explorer.DataFrame.distinct(df, ["x2"])
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  Groups: ["x1"]
-  x1 integer [1, 3]
-  x2 string ["a", "c"]
->
+

By default will return unique values of the requested columns:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.distinct(df, ["year", "country"])
+#Explorer.DataFrame<
+  Polars[1094 x 2]
+  year integer [2010, 2010, 2010, 2010, 2010, ...]
+  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
+>

If keep_all is set to true, then the first value of each column not in the requested +columns will be returned:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.distinct(df, ["year", "country"], keep_all: true)
+#Explorer.DataFrame<
+  Polars[1094 x 10]
+  year integer [2010, 2010, 2010, 2010, 2010, ...]
+  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
+  total integer [2308, 1254, 32500, 141, 7924, ...]
+  solid_fuel integer [627, 117, 332, 0, 0, ...]
+  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
+  gas_fuel integer [74, 7, 14565, 0, 374, ...]
+  cement integer [5, 177, 2598, 0, 204, ...]
+  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
+  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
+  bunker_fuels integer [9, 7, 663, 0, 321, ...]
+>

A callback on the dataframe's names can be passed instead of a list (like select/2):

iex> df = Explorer.DataFrame.new(x1: [1, 3, 3], x2: ["a", "c", "c"], y1: [1, 2, 3])
+iex> Explorer.DataFrame.distinct(df, &String.starts_with?(&1, "x"))
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  x1 integer [1, 3]
+  x2 string ["a", "c"]
+>

If the dataframe has groups, then the columns of each group will be added to the distinct columns:

iex> df = Explorer.DataFrame.new(x1: [1, 3, 3], x2: ["a", "c", "c"], y1: [1, 2, 3])
+iex> df = Explorer.DataFrame.group_by(df, "x1")
+iex> Explorer.DataFrame.distinct(df, ["x2"])
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  Groups: ["x1"]
+  x1 integer [1, 3]
+  x2 string ["a", "c"]
+>
@@ -2327,26 +2327,26 @@

drop_nil(df, columns_or_column \\ 0..-1//1) Examples

-

To drop nils on all columns:

iex> df = Explorer.DataFrame.new(a: [1, 2, nil], b: [1, nil, 3])
-iex> Explorer.DataFrame.drop_nil(df)
-#Explorer.DataFrame<
-  Polars[1 x 2]
-  a integer [1]
-  b integer [1]
->

To drop nils on a single column:

iex> df = Explorer.DataFrame.new(a: [1, 2, nil], b: [1, nil, 3])
-iex> Explorer.DataFrame.drop_nil(df, :a)
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  a integer [1, 2]
-  b integer [1, nil]
->

To drop some columns:

iex> df = Explorer.DataFrame.new(a: [1, 2, nil], b: [1, nil, 3], c: [nil, 5, 6])
-iex> Explorer.DataFrame.drop_nil(df, [:a, :c])
-#Explorer.DataFrame<
-  Polars[1 x 3]
-  a integer [2]
-  b integer [nil]
-  c integer [5]
->

Ranges, regexes, and functions are also accepted in column names, as in select/2.

+

To drop nils on all columns:

iex> df = Explorer.DataFrame.new(a: [1, 2, nil], b: [1, nil, 3])
+iex> Explorer.DataFrame.drop_nil(df)
+#Explorer.DataFrame<
+  Polars[1 x 2]
+  a integer [1]
+  b integer [1]
+>

To drop nils on a single column:

iex> df = Explorer.DataFrame.new(a: [1, 2, nil], b: [1, nil, 3])
+iex> Explorer.DataFrame.drop_nil(df, :a)
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  a integer [1, 2]
+  b integer [1, nil]
+>

To drop some columns:

iex> df = Explorer.DataFrame.new(a: [1, 2, nil], b: [1, nil, 3], c: [nil, 5, 6])
+iex> Explorer.DataFrame.drop_nil(df, [:a, :c])
+#Explorer.DataFrame<
+  Polars[1 x 3]
+  a integer [2]
+  b integer [nil]
+  c integer [5]
+>

Ranges, regexes, and functions are also accepted in column names, as in select/2.

@@ -2380,31 +2380,31 @@

dummies(df, columns_or_column)

Examples -

To mark a single column as dummy:

iex> df = Explorer.DataFrame.new(col_x: ["a", "b", "a", "c"], col_y: ["b", "a", "b", "d"])
-iex> Explorer.DataFrame.dummies(df, "col_x")
-#Explorer.DataFrame<
-  Polars[4 x 3]
-  col_x_a integer [1, 0, 1, 0]
-  col_x_b integer [0, 1, 0, 0]
-  col_x_c integer [0, 0, 0, 1]
->

Or multiple columns:

iex> df = Explorer.DataFrame.new(col_x: ["a", "b", "a", "c"], col_y: ["b", "a", "b", "d"])
-iex> Explorer.DataFrame.dummies(df, ["col_x", "col_y"])
-#Explorer.DataFrame<
-  Polars[4 x 6]
-  col_x_a integer [1, 0, 1, 0]
-  col_x_b integer [0, 1, 0, 0]
-  col_x_c integer [0, 0, 0, 1]
-  col_y_b integer [1, 0, 1, 0]
-  col_y_a integer [0, 1, 0, 0]
-  col_y_d integer [0, 0, 0, 1]
->

Or all string columns:

iex> df = Explorer.DataFrame.new(num: [1, 2, 3, 4], col_y: ["b", "a", "b", "d"])
-iex> Explorer.DataFrame.dummies(df, fn _name, type -> type == :string end)
-#Explorer.DataFrame<
-  Polars[4 x 3]
-  col_y_b integer [1, 0, 1, 0]
-  col_y_a integer [0, 1, 0, 0]
-  col_y_d integer [0, 0, 0, 1]
->

Ranges, regexes, and functions are also accepted in column names, as in select/2.

+

To mark a single column as dummy:

iex> df = Explorer.DataFrame.new(col_x: ["a", "b", "a", "c"], col_y: ["b", "a", "b", "d"])
+iex> Explorer.DataFrame.dummies(df, "col_x")
+#Explorer.DataFrame<
+  Polars[4 x 3]
+  col_x_a integer [1, 0, 1, 0]
+  col_x_b integer [0, 1, 0, 0]
+  col_x_c integer [0, 0, 0, 1]
+>

Or multiple columns:

iex> df = Explorer.DataFrame.new(col_x: ["a", "b", "a", "c"], col_y: ["b", "a", "b", "d"])
+iex> Explorer.DataFrame.dummies(df, ["col_x", "col_y"])
+#Explorer.DataFrame<
+  Polars[4 x 6]
+  col_x_a integer [1, 0, 1, 0]
+  col_x_b integer [0, 1, 0, 0]
+  col_x_c integer [0, 0, 0, 1]
+  col_y_b integer [1, 0, 1, 0]
+  col_y_a integer [0, 1, 0, 0]
+  col_y_d integer [0, 0, 0, 1]
+>

Or all string columns:

iex> df = Explorer.DataFrame.new(num: [1, 2, 3, 4], col_y: ["b", "a", "b", "d"])
+iex> Explorer.DataFrame.dummies(df, fn _name, type -> type == :string end)
+#Explorer.DataFrame<
+  Polars[4 x 3]
+  col_y_b integer [1, 0, 1, 0]
+  col_y_a integer [0, 1, 0, 0]
+  col_y_d integer [0, 0, 0, 1]
+>

Ranges, regexes, and functions are also accepted in column names, as in select/2.

@@ -2440,55 +2440,55 @@

filter(df, query)

Examples -
iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
-iex> Explorer.DataFrame.filter(df, col2 > 2)
-#Explorer.DataFrame<
-  Polars[1 x 2]
-  col1 string ["c"]
-  col2 integer [3]
->
-
-iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
-iex> Explorer.DataFrame.filter(df, col1 == "b")
-#Explorer.DataFrame<
-  Polars[1 x 2]
-  col1 string ["b"]
-  col2 integer [2]
->
-
-iex> df = Explorer.DataFrame.new(col1: [5, 4, 3], col2: [1, 2, 3])
-iex> Explorer.DataFrame.filter(df, [col1 > 3, col2 < 3])
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  col1 integer [5, 4]
-  col2 integer [1, 2]
->

Returning a non-boolean expression errors:

iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
-iex> Explorer.DataFrame.filter(df, cumulative_max(col2))
-** (ArgumentError) expecting the function to return a boolean LazySeries, but instead it returned a LazySeries of type :integer

Which can be addressed by converting it to boolean:

iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
-iex> Explorer.DataFrame.filter(df, cumulative_max(col2) == 1)
-#Explorer.DataFrame<
-  Polars[1 x 2]
-  col1 string ["a"]
-  col2 integer [1]
->

+
iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
+iex> Explorer.DataFrame.filter(df, col2 > 2)
+#Explorer.DataFrame<
+  Polars[1 x 2]
+  col1 string ["c"]
+  col2 integer [3]
+>
+
+iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
+iex> Explorer.DataFrame.filter(df, col1 == "b")
+#Explorer.DataFrame<
+  Polars[1 x 2]
+  col1 string ["b"]
+  col2 integer [2]
+>
+
+iex> df = Explorer.DataFrame.new(col1: [5, 4, 3], col2: [1, 2, 3])
+iex> Explorer.DataFrame.filter(df, [col1 > 3, col2 < 3])
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  col1 integer [5, 4]
+  col2 integer [1, 2]
+>

Returning a non-boolean expression errors:

iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
+iex> Explorer.DataFrame.filter(df, cumulative_max(col2))
+** (ArgumentError) expecting the function to return a boolean LazySeries, but instead it returned a LazySeries of type :integer

Which can be addressed by converting it to boolean:

iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
+iex> Explorer.DataFrame.filter(df, cumulative_max(col2) == 1)
+#Explorer.DataFrame<
+  Polars[1 x 2]
+  col1 string ["a"]
+  col2 integer [1]
+>

Grouped examples

In a grouped dataframe, the aggregation is calculated within each group.

In the following example we select the flowers of the Iris dataset that have the "petal length" -above the average of each species group.

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.filter(grouped, petal_length > mean(petal_length))
-#Explorer.DataFrame<
-  Polars[79 x 5]
-  Groups: ["species"]
-  sepal_length float [4.6, 5.4, 5.0, 4.9, 5.4, ...]
-  sepal_width float [3.1, 3.9, 3.4, 3.1, 3.7, ...]
-  petal_length float [1.5, 1.7, 1.5, 1.5, 1.5, ...]
-  petal_width float [0.2, 0.4, 0.2, 0.1, 0.2, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
->
+above the average of each species group.

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.filter(grouped, petal_length > mean(petal_length))
+#Explorer.DataFrame<
+  Polars[79 x 5]
+  Groups: ["species"]
+  sepal_length float [4.6, 5.4, 5.0, 4.9, 5.4, ...]
+  sepal_width float [3.1, 3.9, 3.4, 3.1, 3.7, ...]
+  petal_length float [1.5, 1.7, 1.5, 1.5, 1.5, ...]
+  petal_width float [0.2, 0.4, 0.2, 0.1, 0.2, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+>
@@ -2527,39 +2527,39 @@

filter_with(df, fun)

Examples -
iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
-iex> Explorer.DataFrame.filter_with(df, &Explorer.Series.greater(&1["col2"], 2))
-#Explorer.DataFrame<
-  Polars[1 x 2]
-  col1 string ["c"]
-  col2 integer [3]
->
-
-iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
-iex> Explorer.DataFrame.filter_with(df, fn df -> Explorer.Series.equal(df["col1"], "b") end)
-#Explorer.DataFrame<
-  Polars[1 x 2]
-  col1 string ["b"]
-  col2 integer [2]
->

+
iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
+iex> Explorer.DataFrame.filter_with(df, &Explorer.Series.greater(&1["col2"], 2))
+#Explorer.DataFrame<
+  Polars[1 x 2]
+  col1 string ["c"]
+  col2 integer [3]
+>
+
+iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
+iex> Explorer.DataFrame.filter_with(df, fn df -> Explorer.Series.equal(df["col1"], "b") end)
+#Explorer.DataFrame<
+  Polars[1 x 2]
+  col1 string ["b"]
+  col2 integer [2]
+>

Grouped examples

In a grouped dataframe, the aggregation is calculated within each group.

In the following example we select the flowers of the Iris dataset that have the "petal length" -above the average of each species group.

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.filter_with(grouped, &Explorer.Series.greater(&1["petal_length"], Explorer.Series.mean(&1["petal_length"])))
-#Explorer.DataFrame<
-  Polars[79 x 5]
-  Groups: ["species"]
-  sepal_length float [4.6, 5.4, 5.0, 4.9, 5.4, ...]
-  sepal_width float [3.1, 3.9, 3.4, 3.1, 3.7, ...]
-  petal_length float [1.5, 1.7, 1.5, 1.5, 1.5, ...]
-  petal_width float [0.2, 0.4, 0.2, 0.1, 0.2, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
->
+above the average of each species group.

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.filter_with(grouped, &Explorer.Series.greater(&1["petal_length"], Explorer.Series.mean(&1["petal_length"])))
+#Explorer.DataFrame<
+  Polars[79 x 5]
+  Groups: ["species"]
+  sepal_length float [4.6, 5.4, 5.0, 4.9, 5.4, ...]
+  sepal_width float [3.1, 3.9, 3.4, 3.1, 3.7, ...]
+  petal_length float [1.5, 1.7, 1.5, 1.5, 1.5, ...]
+  petal_width float [0.2, 0.4, 0.2, 0.1, 0.2, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+>
@@ -2593,14 +2593,14 @@

frequencies(df, columns)

Examples -
iex> df = Explorer.DataFrame.new(a: ["a", "a", "b"], b: [1, 1, nil])
-iex> Explorer.DataFrame.frequencies(df, [:a, :b])
-#Explorer.DataFrame<
-  Polars[2 x 3]
-  a string ["a", "b"]
-  b integer [1, nil]
-  counts integer [2, 1]
->
+
iex> df = Explorer.DataFrame.new(a: ["a", "a", "b"], b: [1, 1, nil])
+iex> Explorer.DataFrame.frequencies(df, [:a, :b])
+#Explorer.DataFrame<
+  Polars[2 x 3]
+  a string ["a", "b"]
+  b integer [1, nil]
+  counts integer [2, 1]
+>
@@ -2635,52 +2635,52 @@

group_by(df, group)

Examples -

You can group by a single variable:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.group_by(df, "country")
-#Explorer.DataFrame<
-  Polars[1094 x 10]
-  Groups: ["country"]
-  year integer [2010, 2010, 2010, 2010, 2010, ...]
-  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
-  total integer [2308, 1254, 32500, 141, 7924, ...]
-  solid_fuel integer [627, 117, 332, 0, 0, ...]
-  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
-  gas_fuel integer [74, 7, 14565, 0, 374, ...]
-  cement integer [5, 177, 2598, 0, 204, ...]
-  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
-  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
-  bunker_fuels integer [9, 7, 663, 0, 321, ...]
->

Or you can group by multiple columns in a given list:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.group_by(df, ["country", "year"])
-#Explorer.DataFrame<
-  Polars[1094 x 10]
-  Groups: ["country", "year"]
-  year integer [2010, 2010, 2010, 2010, 2010, ...]
-  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
-  total integer [2308, 1254, 32500, 141, 7924, ...]
-  solid_fuel integer [627, 117, 332, 0, 0, ...]
-  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
-  gas_fuel integer [74, 7, 14565, 0, 374, ...]
-  cement integer [5, 177, 2598, 0, 204, ...]
-  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
-  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
-  bunker_fuels integer [9, 7, 663, 0, 321, ...]
->

Or by a range:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.group_by(df, 0..1)
-#Explorer.DataFrame<
-  Polars[1094 x 10]
-  Groups: ["year", "country"]
-  year integer [2010, 2010, 2010, 2010, 2010, ...]
-  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
-  total integer [2308, 1254, 32500, 141, 7924, ...]
-  solid_fuel integer [627, 117, 332, 0, 0, ...]
-  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
-  gas_fuel integer [74, 7, 14565, 0, 374, ...]
-  cement integer [5, 177, 2598, 0, 204, ...]
-  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
-  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
-  bunker_fuels integer [9, 7, 663, 0, 321, ...]
->

Regexes and functions are also accepted in column names, as in select/2.

+

You can group by a single variable:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.group_by(df, "country")
+#Explorer.DataFrame<
+  Polars[1094 x 10]
+  Groups: ["country"]
+  year integer [2010, 2010, 2010, 2010, 2010, ...]
+  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
+  total integer [2308, 1254, 32500, 141, 7924, ...]
+  solid_fuel integer [627, 117, 332, 0, 0, ...]
+  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
+  gas_fuel integer [74, 7, 14565, 0, 374, ...]
+  cement integer [5, 177, 2598, 0, 204, ...]
+  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
+  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
+  bunker_fuels integer [9, 7, 663, 0, 321, ...]
+>

Or you can group by multiple columns in a given list:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.group_by(df, ["country", "year"])
+#Explorer.DataFrame<
+  Polars[1094 x 10]
+  Groups: ["country", "year"]
+  year integer [2010, 2010, 2010, 2010, 2010, ...]
+  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
+  total integer [2308, 1254, 32500, 141, 7924, ...]
+  solid_fuel integer [627, 117, 332, 0, 0, ...]
+  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
+  gas_fuel integer [74, 7, 14565, 0, 374, ...]
+  cement integer [5, 177, 2598, 0, 204, ...]
+  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
+  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
+  bunker_fuels integer [9, 7, 663, 0, 321, ...]
+>

Or by a range:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.group_by(df, 0..1)
+#Explorer.DataFrame<
+  Polars[1094 x 10]
+  Groups: ["year", "country"]
+  year integer [2010, 2010, 2010, 2010, 2010, ...]
+  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
+  total integer [2308, 1254, 32500, 141, 7924, ...]
+  solid_fuel integer [627, 117, 332, 0, 0, ...]
+  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
+  gas_fuel integer [74, 7, 14565, 0, 374, ...]
+  cement integer [5, 177, 2598, 0, 204, ...]
+  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
+  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
+  bunker_fuels integer [9, 7, 663, 0, 321, ...]
+>

Regexes and functions are also accepted in column names, as in select/2.

@@ -2716,26 +2716,26 @@

mask(df, mask)

This function must only be used when you need to select rows based on external values that are not available to the dataframe. For example, -you can pass a list:

iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
-iex> Explorer.DataFrame.mask(df, [false, true, false])
-#Explorer.DataFrame<
-  Polars[1 x 2]
-  col1 string ["b"]
-  col2 integer [2]
->

You must avoid using masks when the masks themselves are computed from -other columns. For example, DO NOT do this:

iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
-iex> Explorer.DataFrame.mask(df, Explorer.Series.greater(df["col2"], 1))
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  col1 string ["b", "c"]
-  col2 integer [2, 3]
->

Instead, do this:

iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
-iex> Explorer.DataFrame.filter_with(df, fn df -> Explorer.Series.greater(df["col2"], 1) end)
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  col1 string ["b", "c"]
-  col2 integer [2, 3]
->

The filter_with/2 version is much more efficient because it doesn't need +you can pass a list:

iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
+iex> Explorer.DataFrame.mask(df, [false, true, false])
+#Explorer.DataFrame<
+  Polars[1 x 2]
+  col1 string ["b"]
+  col2 integer [2]
+>

You must avoid using masks when the masks themselves are computed from +other columns. For example, DO NOT do this:

iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
+iex> Explorer.DataFrame.mask(df, Explorer.Series.greater(df["col2"], 1))
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  col1 string ["b", "c"]
+  col2 integer [2, 3]
+>

Instead, do this:

iex> df = Explorer.DataFrame.new(col1: ["a", "b", "c"], col2: [1, 2, 3])
+iex> Explorer.DataFrame.filter_with(df, fn df -> Explorer.Series.greater(df["col2"], 1) end)
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  col1 string ["b", "c"]
+  col2 integer [2, 3]
+>

The filter_with/2 version is much more efficient because it doesn't need to create intermediate series representations to apply the mask.

@@ -2774,39 +2774,39 @@

mutate(df, mutations)

Examples -

Mutations are useful to add or modify columns in your dataframe:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
-iex> Explorer.DataFrame.mutate(df, c: b + 1)
-#Explorer.DataFrame<
-  Polars[3 x 3]
-  a string ["a", "b", "c"]
-  b integer [1, 2, 3]
-  c integer [2, 3, 4]
->

It's also possible to overwrite existing columns:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
-iex> Explorer.DataFrame.mutate(df, a: b * 2)
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a integer [2, 4, 6]
-  b integer [1, 2, 3]
->

Scalar values are repeated to fill the series:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
-iex> Explorer.DataFrame.mutate(df, a: 4)
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a integer [4, 4, 4]
-  b integer [1, 2, 3]
->

It's also possible to use functions from the Series module, like Explorer.Series.window_sum/3:

iex> df = Explorer.DataFrame.new(a: [1, 2, 3])
-iex> Explorer.DataFrame.mutate(df, b: window_sum(a, 2))
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a integer [1, 2, 3]
-  b integer [1, 3, 5]
->

Alternatively, all of the above works with a map instead of a keyword list:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
-iex> Explorer.DataFrame.mutate(df, %{"c" => cast(b, :float)})
-#Explorer.DataFrame<
-  Polars[3 x 3]
-  a string ["a", "b", "c"]
-  b integer [1, 2, 3]
-  c float [1.0, 2.0, 3.0]
->

+

Mutations are useful to add or modify columns in your dataframe:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
+iex> Explorer.DataFrame.mutate(df, c: b + 1)
+#Explorer.DataFrame<
+  Polars[3 x 3]
+  a string ["a", "b", "c"]
+  b integer [1, 2, 3]
+  c integer [2, 3, 4]
+>

It's also possible to overwrite existing columns:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
+iex> Explorer.DataFrame.mutate(df, a: b * 2)
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a integer [2, 4, 6]
+  b integer [1, 2, 3]
+>

Scalar values are repeated to fill the series:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
+iex> Explorer.DataFrame.mutate(df, a: 4)
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a integer [4, 4, 4]
+  b integer [1, 2, 3]
+>

It's also possible to use functions from the Series module, like Explorer.Series.window_sum/3:

iex> df = Explorer.DataFrame.new(a: [1, 2, 3])
+iex> Explorer.DataFrame.mutate(df, b: window_sum(a, 2))
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a integer [1, 2, 3]
+  b integer [1, 3, 5]
+>

Alternatively, all of the above works with a map instead of a keyword list:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
+iex> Explorer.DataFrame.mutate(df, %{"c" => cast(b, :float)})
+#Explorer.DataFrame<
+  Polars[3 x 3]
+  a string ["a", "b", "c"]
+  b integer [1, 2, 3]
+  c float [1.0, 2.0, 3.0]
+>

Grouped examples @@ -2816,28 +2816,28 @@

mutate(df, mutations)

This enables some aggregations to be made considering each group. It's almost like
summarise/2, but repeating the results for each member in the group. For example, if we want to count how many elements of a given group, we can add a new -column with that aggregation:

iex> df = Explorer.DataFrame.new(id: ["a", "a", "b"], b: [1, 2, 3])
-iex> grouped = Explorer.DataFrame.group_by(df, :id)
-iex> Explorer.DataFrame.mutate(grouped, count: count(b))
-#Explorer.DataFrame<
-  Polars[3 x 3]
-  Groups: ["id"]
-  id string ["a", "a", "b"]
-  b integer [1, 2, 3]
-  count integer [2, 2, 1]
->

In case we want to get the average size of the petal length from the Iris dataset, we can:

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.mutate(grouped, petal_length_avg: mean(petal_length))
-#Explorer.DataFrame<
-  Polars[150 x 6]
-  Groups: ["species"]
-  sepal_length float [5.1, 4.9, 4.7, 4.6, 5.0, ...]
-  sepal_width float [3.5, 3.0, 3.2, 3.1, 3.6, ...]
-  petal_length float [1.4, 1.4, 1.3, 1.5, 1.4, ...]
-  petal_width float [0.2, 0.2, 0.2, 0.2, 0.2, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
-  petal_length_avg float [1.4640000000000004, 1.4640000000000004, 1.4640000000000004, 1.4640000000000004, 1.4640000000000004, ...]
->
+column with that aggregation:

iex> df = Explorer.DataFrame.new(id: ["a", "a", "b"], b: [1, 2, 3])
+iex> grouped = Explorer.DataFrame.group_by(df, :id)
+iex> Explorer.DataFrame.mutate(grouped, count: count(b))
+#Explorer.DataFrame<
+  Polars[3 x 3]
+  Groups: ["id"]
+  id string ["a", "a", "b"]
+  b integer [1, 2, 3]
+  count integer [2, 2, 1]
+>

In case we want to get the average size of the petal length from the Iris dataset, we can:

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.mutate(grouped, petal_length_avg: mean(petal_length))
+#Explorer.DataFrame<
+  Polars[150 x 6]
+  Groups: ["species"]
+  sepal_length float [5.1, 4.9, 4.7, 4.6, 5.0, ...]
+  sepal_width float [3.5, 3.0, 3.2, 3.1, 3.6, ...]
+  petal_length float [1.4, 1.4, 1.3, 1.5, 1.4, ...]
+  petal_width float [0.2, 0.2, 0.2, 0.2, 0.2, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+  petal_length_avg float [1.4640000000000004, 1.4640000000000004, 1.4640000000000004, 1.4640000000000004, 1.4640000000000004, ...]
+>
@@ -2880,31 +2880,31 @@

mutate_with(df, fun)

Examples

-

Here is an example of a new column that sums the value of two other columns:

iex> df = Explorer.DataFrame.new(a: [4, 5, 6], b: [1, 2, 3])
-iex> Explorer.DataFrame.mutate_with(df, &[c: Explorer.Series.add(&1["a"], &1["b"])])
-#Explorer.DataFrame<
-  Polars[3 x 3]
-  a integer [4, 5, 6]
-  b integer [1, 2, 3]
-  c integer [5, 7, 9]
->

You can overwrite existing columns as well:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
-iex> Explorer.DataFrame.mutate_with(df, &[b: Explorer.Series.pow(&1["b"], 2)])
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a string ["a", "b", "c"]
-  b float [1.0, 4.0, 9.0]
->

It's possible to "reuse" a variable for different computations:

iex> df = Explorer.DataFrame.new(a: [4, 5, 6], b: [1, 2, 3])
-iex> Explorer.DataFrame.mutate_with(df, fn ldf ->
-iex>   c = Explorer.Series.add(ldf["a"], ldf["b"])
-iex>   [c: c, d: Explorer.Series.window_sum(c, 2)]
-iex> end)
-#Explorer.DataFrame<
-  Polars[3 x 4]
-  a integer [4, 5, 6]
-  b integer [1, 2, 3]
-  c integer [5, 7, 9]
-  d integer [5, 12, 16]
->

+

Here is an example of a new column that sums the value of two other columns:

iex> df = Explorer.DataFrame.new(a: [4, 5, 6], b: [1, 2, 3])
+iex> Explorer.DataFrame.mutate_with(df, &[c: Explorer.Series.add(&1["a"], &1["b"])])
+#Explorer.DataFrame<
+  Polars[3 x 3]
+  a integer [4, 5, 6]
+  b integer [1, 2, 3]
+  c integer [5, 7, 9]
+>

You can overwrite existing columns as well:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
+iex> Explorer.DataFrame.mutate_with(df, &[b: Explorer.Series.pow(&1["b"], 2)])
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a string ["a", "b", "c"]
+  b float [1.0, 4.0, 9.0]
+>

It's possible to "reuse" a variable for different computations:

iex> df = Explorer.DataFrame.new(a: [4, 5, 6], b: [1, 2, 3])
+iex> Explorer.DataFrame.mutate_with(df, fn ldf ->
+iex>   c = Explorer.Series.add(ldf["a"], ldf["b"])
+iex>   [c: c, d: Explorer.Series.window_sum(c, 2)]
+iex> end)
+#Explorer.DataFrame<
+  Polars[3 x 4]
+  a integer [4, 5, 6]
+  b integer [1, 2, 3]
+  c integer [5, 7, 9]
+  d integer [5, 12, 16]
+>

Grouped examples @@ -2912,16 +2912,16 @@

mutate_with(df, fun)

Mutations in grouped dataframes takes the context of the group. For example, if we want to count how many elements of a given group, -we can add a new column with that aggregation:

iex> df = Explorer.DataFrame.new(id: ["a", "a", "b"], b: [1, 2, 3])
-iex> grouped = Explorer.DataFrame.group_by(df, :id)
-iex> Explorer.DataFrame.mutate_with(grouped, &[count: Explorer.Series.count(&1["b"])])
-#Explorer.DataFrame<
-  Polars[3 x 3]
-  Groups: ["id"]
-  id string ["a", "a", "b"]
-  b integer [1, 2, 3]
-  count integer [2, 2, 1]
->
+we can add a new column with that aggregation:

iex> df = Explorer.DataFrame.new(id: ["a", "a", "b"], b: [1, 2, 3])
+iex> grouped = Explorer.DataFrame.group_by(df, :id)
+iex> Explorer.DataFrame.mutate_with(grouped, &[count: Explorer.Series.count(&1["b"])])
+#Explorer.DataFrame<
+  Polars[3 x 3]
+  Groups: ["id"]
+  id string ["a", "a", "b"]
+  b integer [1, 2, 3]
+  count integer [2, 2, 1]
+>
@@ -2955,14 +2955,14 @@

nil_count(df)

Examples
-
iex> df = Explorer.DataFrame.new(a: ["d", nil, "f"], b: [nil, 2, nil], c: ["a", "b", "c"])
-iex> Explorer.DataFrame.nil_count(df)
-#Explorer.DataFrame<
-  Polars[1 x 3]
-  a integer [1]
-  b integer [2]
-  c integer [0]
->
+
iex> df = Explorer.DataFrame.new(a: ["d", nil, "f"], b: [nil, 2, nil], c: ["a", "b", "c"])
+iex> Explorer.DataFrame.nil_count(df)
+#Explorer.DataFrame<
+  Polars[1 x 3]
+  a integer [1]
+  b integer [2]
+  c integer [0]
+>
@@ -3019,47 +3019,47 @@

pivot_longer(df, columns_to_pivot, opts \\ Examples

-
iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.pivot_longer(df, &String.ends_with?(&1, "fuel"))
-#Explorer.DataFrame<
-  Polars[3282 x 9]
-  year integer [2010, 2010, 2010, 2010, 2010, ...]
-  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
-  total integer [2308, 1254, 32500, 141, 7924, ...]
-  cement integer [5, 177, 2598, 0, 204, ...]
-  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
-  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
-  bunker_fuels integer [9, 7, 663, 0, 321, ...]
-  variable string ["solid_fuel", "solid_fuel", "solid_fuel", "solid_fuel", "solid_fuel", ...]
-  value integer [627, 117, 332, 0, 0, ...]
->
-
-iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.pivot_longer(df, &String.ends_with?(&1, "fuel"), select: ["year", "country"])
-#Explorer.DataFrame<
-  Polars[3282 x 4]
-  year integer [2010, 2010, 2010, 2010, 2010, ...]
-  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
-  variable string ["solid_fuel", "solid_fuel", "solid_fuel", "solid_fuel", "solid_fuel", ...]
-  value integer [627, 117, 332, 0, 0, ...]
->
-
-iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.pivot_longer(df, ["total"], select: ["year", "country"], discard: ["country"])
-#Explorer.DataFrame<
-  Polars[1094 x 3]
-  year integer [2010, 2010, 2010, 2010, 2010, ...]
-  variable string ["total", "total", "total", "total", "total", ...]
-  value integer [2308, 1254, 32500, 141, 7924, ...]
->
-
-iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.pivot_longer(df, ["total"], select: [], names_to: "my_var", values_to: "my_value")
-#Explorer.DataFrame<
-  Polars[1094 x 2]
-  my_var string ["total", "total", "total", "total", "total", ...]
-  my_value integer [2308, 1254, 32500, 141, 7924, ...]
->

+
iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.pivot_longer(df, &String.ends_with?(&1, "fuel"))
+#Explorer.DataFrame<
+  Polars[3282 x 9]
+  year integer [2010, 2010, 2010, 2010, 2010, ...]
+  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
+  total integer [2308, 1254, 32500, 141, 7924, ...]
+  cement integer [5, 177, 2598, 0, 204, ...]
+  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
+  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
+  bunker_fuels integer [9, 7, 663, 0, 321, ...]
+  variable string ["solid_fuel", "solid_fuel", "solid_fuel", "solid_fuel", "solid_fuel", ...]
+  value integer [627, 117, 332, 0, 0, ...]
+>
+
+iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.pivot_longer(df, &String.ends_with?(&1, "fuel"), select: ["year", "country"])
+#Explorer.DataFrame<
+  Polars[3282 x 4]
+  year integer [2010, 2010, 2010, 2010, 2010, ...]
+  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
+  variable string ["solid_fuel", "solid_fuel", "solid_fuel", "solid_fuel", "solid_fuel", ...]
+  value integer [627, 117, 332, 0, 0, ...]
+>
+
+iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.pivot_longer(df, ["total"], select: ["year", "country"], discard: ["country"])
+#Explorer.DataFrame<
+  Polars[1094 x 3]
+  year integer [2010, 2010, 2010, 2010, 2010, ...]
+  variable string ["total", "total", "total", "total", "total", ...]
+  value integer [2308, 1254, 32500, 141, 7924, ...]
+>
+
+iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.pivot_longer(df, ["total"], select: [], names_to: "my_var", values_to: "my_value")
+#Explorer.DataFrame<
+  Polars[1094 x 2]
+  my_var string ["total", "total", "total", "total", "total", ...]
+  my_value integer [2308, 1254, 32500, 141, 7924, ...]
+>

Grouped examples @@ -3067,31 +3067,31 @@

pivot_longer(df, columns_to_pivot, opts \\

In the following example we want to take the Iris dataset and increase the number of rows by pivoting the "sepal_length" column. This dataset is grouped by "species", so the resultant -dataframe is going to keep the "species" group:

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.pivot_longer(grouped, ["sepal_length"])
-#Explorer.DataFrame<
-  Polars[150 x 6]
-  Groups: ["species"]
-  sepal_width float [3.5, 3.0, 3.2, 3.1, 3.6, ...]
-  petal_length float [1.4, 1.4, 1.3, 1.5, 1.4, ...]
-  petal_width float [0.2, 0.2, 0.2, 0.2, 0.2, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
-  variable string ["sepal_length", "sepal_length", "sepal_length", "sepal_length", "sepal_length", ...]
-  value float [5.1, 4.9, 4.7, 4.6, 5.0, ...]
->

Now we want to do something different: we want to pivot the "species" column that is also a group. -This is going to remove the group in the resultant dataframe:

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.pivot_longer(grouped, ["species"])
-#Explorer.DataFrame<
-  Polars[150 x 6]
-  sepal_length float [5.1, 4.9, 4.7, 4.6, 5.0, ...]
-  sepal_width float [3.5, 3.0, 3.2, 3.1, 3.6, ...]
-  petal_length float [1.4, 1.4, 1.3, 1.5, 1.4, ...]
-  petal_width float [0.2, 0.2, 0.2, 0.2, 0.2, ...]
-  variable string ["species", "species", "species", "species", "species", ...]
-  value string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
->
+dataframe is going to keep the "species" group:

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.pivot_longer(grouped, ["sepal_length"])
+#Explorer.DataFrame<
+  Polars[150 x 6]
+  Groups: ["species"]
+  sepal_width float [3.5, 3.0, 3.2, 3.1, 3.6, ...]
+  petal_length float [1.4, 1.4, 1.3, 1.5, 1.4, ...]
+  petal_width float [0.2, 0.2, 0.2, 0.2, 0.2, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+  variable string ["sepal_length", "sepal_length", "sepal_length", "sepal_length", "sepal_length", ...]
+  value float [5.1, 4.9, 4.7, 4.6, 5.0, ...]
+>

Now we want to do something different: we want to pivot the "species" column that is also a group. +This is going to remove the group in the resultant dataframe:

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.pivot_longer(grouped, ["species"])
+#Explorer.DataFrame<
+  Polars[150 x 6]
+  sepal_length float [5.1, 4.9, 4.7, 4.6, 5.0, ...]
+  sepal_width float [3.5, 3.0, 3.2, 3.1, 3.6, ...]
+  petal_length float [1.4, 1.4, 1.3, 1.5, 1.4, ...]
+  petal_width float [0.2, 0.2, 0.2, 0.2, 0.2, ...]
+  variable string ["species", "species", "species", "species", "species", ...]
+  value string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+>

@@ -3150,12 +3150,12 @@

pivot_wider(df, names_from, values_from, op

Suppose we have a basketball court and multiple teams that want to train in that court. They need to share a schedule with the hours each team is going to use it. Here is a dataframe representing -that schedule:

iex> Explorer.DataFrame.new(
-iex>   weekday: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
-iex>   team: ["A", "B", "C", "A", "B", "C", "A", "B", "C", "A"],
-iex>   hour: [10, 9, 10, 10, 11, 15, 14, 16, 14, 16]
-iex> )

This dataframe is going to look like this - using table/2:

  +----------------------------------------------+
-  |  Explorer DataFrame: [rows: 10, columns: 3]  |
+that schedule:

iex> Explorer.DataFrame.new(
+iex>   weekday: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
+iex>   team: ["A", "B", "C", "A", "B", "C", "A", "B", "C", "A"],
+iex>   hour: [10, 9, 10, 10, 11, 15, 14, 16, 14, 16]
+iex> )

This dataframe is going to look like this - using table/2:

  +----------------------------------------------+
+  |  Explorer DataFrame: [rows: 10, columns: 3]  |
   +---------------+--------------+---------------+
   |    weekday    |     team     |     hour      |
   |   <string>    |   <string>   |   <integer>   |
@@ -3181,22 +3181,22 @@ 

pivot_wider(df, names_from, values_from, op | Friday | A | 16 | +---------------+--------------+---------------+

You can see that the "weekday" repeats, and it's not clear how free the agenda is. We can solve that by pivoting the "weekday" column in multiple columns, making each weekday -a new column in the resultant dataframe.

iex> df = Explorer.DataFrame.new(
-iex>   weekday: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
-iex>   team: ["A", "B", "C", "A", "B", "C", "A", "B", "C", "A"],
-iex>   hour: [10, 9, 10, 10, 11, 15, 14, 16, 14, 16]
-iex> )
-iex> Explorer.DataFrame.pivot_wider(df, "weekday", "hour")
-#Explorer.DataFrame<
-  Polars[3 x 6]
-  team string ["A", "B", "C"]
-  Monday integer [10, nil, 15]
-  Tuesday integer [14, 9, nil]
-  Wednesday integer [nil, 16, 10]
-  Thursday integer [10, nil, 14]
-  Friday integer [16, 11, nil]
->

Now if we print that same dataframe with table/2, we get a better picture of the schedule:

  +----------------------------------------------------------------------+
-  |              Explorer DataFrame: [rows: 3, columns: 6]               |
+a new column in the resultant dataframe.

iex> df = Explorer.DataFrame.new(
+iex>   weekday: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
+iex>   team: ["A", "B", "C", "A", "B", "C", "A", "B", "C", "A"],
+iex>   hour: [10, 9, 10, 10, 11, 15, 14, 16, 14, 16]
+iex> )
+iex> Explorer.DataFrame.pivot_wider(df, "weekday", "hour")
+#Explorer.DataFrame<
+  Polars[3 x 6]
+  team string ["A", "B", "C"]
+  Monday integer [10, nil, 15]
+  Tuesday integer [14, 9, nil]
+  Wednesday integer [nil, 16, 10]
+  Thursday integer [10, nil, 14]
+  Friday integer [16, 11, nil]
+>

Now if we print that same dataframe with table/2, we get a better picture of the schedule:

  +----------------------------------------------------------------------+
+  |              Explorer DataFrame: [rows: 3, columns: 6]               |
   +----------+-----------+-----------+-----------+-----------+-----------+
   |   team   |  Monday   |  Tuesday  | Wednesday | Thursday  |  Friday   |
   | <string> | <integer> | <integer> | <integer> | <integer> | <integer> |
@@ -3207,93 +3207,93 @@ 

pivot_wider(df, names_from, values_from, op +----------+-----------+-----------+-----------+-----------+-----------+ | C | 15 | | 10 | 14 | | +----------+-----------+-----------+-----------+-----------+-----------+

Pivot wider can create unpredictable column names, and sometimes they can conflict with ID columns. -In that scenario, we add a number as suffix to duplicated column names. Here is an example:

iex> df = Explorer.DataFrame.new(
-iex>   product_id: [1, 1, 1, 1, 2, 2, 2, 2],
-iex>   property: ["product_id", "width_cm", "height_cm", "length_cm", "product_id", "width_cm", "height_cm", "length_cm"],
-iex>   property_value: [1, 42, 40, 64, 2, 35, 20, 40]
-iex> )
-iex> Explorer.DataFrame.pivot_wider(df, "property", "property_value")
-#Explorer.DataFrame<
-  Polars[2 x 5]
-  product_id integer [1, 2]
-  product_id_1 integer [1, 2]
-  width_cm integer [42, 35]
-  height_cm integer [40, 20]
-  length_cm integer [64, 40]
->

But if the option :names_prefix is used, that suffix is not added:

iex> df = Explorer.DataFrame.new(
-iex>   product_id: [1, 1, 1, 1, 2, 2, 2, 2],
-iex>   property: ["product_id", "width_cm", "height_cm", "length_cm", "product_id", "width_cm", "height_cm", "length_cm"],
-iex>   property_value: [1, 42, 40, 64, 2, 35, 20, 40]
-iex> )
-iex> Explorer.DataFrame.pivot_wider(df, "property", "property_value", names_prefix: "col_")
-#Explorer.DataFrame<
-  Polars[2 x 5]
-  product_id integer [1, 2]
-  col_product_id integer [1, 2]
-  col_width_cm integer [42, 35]
-  col_height_cm integer [40, 20]
-  col_length_cm integer [64, 40]
->

Multiple columns are accepted for the values_from parameter, but the behaviour is slightly +In that scenario, we add a number as suffix to duplicated column names. Here is an example:

iex> df = Explorer.DataFrame.new(
+iex>   product_id: [1, 1, 1, 1, 2, 2, 2, 2],
+iex>   property: ["product_id", "width_cm", "height_cm", "length_cm", "product_id", "width_cm", "height_cm", "length_cm"],
+iex>   property_value: [1, 42, 40, 64, 2, 35, 20, 40]
+iex> )
+iex> Explorer.DataFrame.pivot_wider(df, "property", "property_value")
+#Explorer.DataFrame<
+  Polars[2 x 5]
+  product_id integer [1, 2]
+  product_id_1 integer [1, 2]
+  width_cm integer [42, 35]
+  height_cm integer [40, 20]
+  length_cm integer [64, 40]
+>

But if the option :names_prefix is used, that suffix is not added:

iex> df = Explorer.DataFrame.new(
+iex>   product_id: [1, 1, 1, 1, 2, 2, 2, 2],
+iex>   property: ["product_id", "width_cm", "height_cm", "length_cm", "product_id", "width_cm", "height_cm", "length_cm"],
+iex>   property_value: [1, 42, 40, 64, 2, 35, 20, 40]
+iex> )
+iex> Explorer.DataFrame.pivot_wider(df, "property", "property_value", names_prefix: "col_")
+#Explorer.DataFrame<
+  Polars[2 x 5]
+  product_id integer [1, 2]
+  col_product_id integer [1, 2]
+  col_width_cm integer [42, 35]
+  col_height_cm integer [40, 20]
+  col_length_cm integer [64, 40]
+>

Multiple columns are accepted for the values_from parameter, but the behaviour is slightly different for the naming of new columns in the resultant dataframe. The new columns are going to be prefixed by the name of the original value column, followed by an underscore and the -original column name, followed by the name of the variable.

iex> df = Explorer.DataFrame.new(
-iex>   product_id: [1, 1, 1, 1, 2, 2, 2, 2],
-iex>   property: ["product_id", "width_cm", "height_cm", "length_cm", "product_id", "width_cm", "height_cm", "length_cm"],
-iex>   property_value: [1, 42, 40, 64, 2, 35, 20, 40],
-iex>   another_value: [1, 43, 41, 65, 2, 36, 21, 42]
-iex> )
-iex> Explorer.DataFrame.pivot_wider(df, "property", ["property_value", "another_value"])
-#Explorer.DataFrame<
-  Polars[2 x 9]
-  product_id integer [1, 2]
-  property_value_property_product_id integer [1, 2]
-  property_value_property_width_cm integer [42, 35]
-  property_value_property_height_cm integer [40, 20]
-  property_value_property_length_cm integer [64, 40]
-  another_value_property_product_id integer [1, 2]
-  another_value_property_width_cm integer [43, 36]
-  another_value_property_height_cm integer [41, 21]
-  another_value_property_length_cm integer [65, 42]
->

+original column name, followed by the name of the variable.

iex> df = Explorer.DataFrame.new(
+iex>   product_id: [1, 1, 1, 1, 2, 2, 2, 2],
+iex>   property: ["product_id", "width_cm", "height_cm", "length_cm", "product_id", "width_cm", "height_cm", "length_cm"],
+iex>   property_value: [1, 42, 40, 64, 2, 35, 20, 40],
+iex>   another_value: [1, 43, 41, 65, 2, 36, 21, 42]
+iex> )
+iex> Explorer.DataFrame.pivot_wider(df, "property", ["property_value", "another_value"])
+#Explorer.DataFrame<
+  Polars[2 x 9]
+  product_id integer [1, 2]
+  property_value_property_product_id integer [1, 2]
+  property_value_property_width_cm integer [42, 35]
+  property_value_property_height_cm integer [40, 20]
+  property_value_property_length_cm integer [64, 40]
+  another_value_property_product_id integer [1, 2]
+  another_value_property_width_cm integer [43, 36]
+  another_value_property_height_cm integer [41, 21]
+  another_value_property_length_cm integer [65, 42]
+>

Grouped examples

Now using the same idea, we can see that there is not much difference for grouped dataframes. -The only detail is that groups that are not ID columns are discarded.

iex> df = Explorer.DataFrame.new(
-iex>   weekday: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
-iex>   team: ["A", "B", "C", "A", "B", "C", "A", "B", "C", "A"],
-iex>   hour: [10, 9, 10, 10, 11, 15, 14, 16, 14, 16]
-iex> )
-iex> grouped = Explorer.DataFrame.group_by(df, "team")
-iex> Explorer.DataFrame.pivot_wider(grouped, "weekday", "hour")
-#Explorer.DataFrame<
-  Polars[3 x 6]
-  Groups: ["team"]
-  team string ["A", "B", "C"]
-  Monday integer [10, nil, 15]
-  Tuesday integer [14, 9, nil]
-  Wednesday integer [nil, 16, 10]
-  Thursday integer [10, nil, 14]
-  Friday integer [16, 11, nil]
->

In the following example the group "weekday" is going to be removed, because the column is going -to be pivoted in multiple columns:

iex> df = Explorer.DataFrame.new(
-iex>   weekday: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
-iex>   team: ["A", "B", "C", "A", "B", "C", "A", "B", "C", "A"],
-iex>   hour: [10, 9, 10, 10, 11, 15, 14, 16, 14, 16]
-iex> )
-iex> grouped = Explorer.DataFrame.group_by(df, "weekday")
-iex> Explorer.DataFrame.pivot_wider(grouped, "weekday", "hour")
-#Explorer.DataFrame<
-  Polars[3 x 6]
-  team string ["A", "B", "C"]
-  Monday integer [10, nil, 15]
-  Tuesday integer [14, 9, nil]
-  Wednesday integer [nil, 16, 10]
-  Thursday integer [10, nil, 14]
-  Friday integer [16, 11, nil]
->
+The only detail is that groups that are not ID columns are discarded.

iex> df = Explorer.DataFrame.new(
+iex>   weekday: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
+iex>   team: ["A", "B", "C", "A", "B", "C", "A", "B", "C", "A"],
+iex>   hour: [10, 9, 10, 10, 11, 15, 14, 16, 14, 16]
+iex> )
+iex> grouped = Explorer.DataFrame.group_by(df, "team")
+iex> Explorer.DataFrame.pivot_wider(grouped, "weekday", "hour")
+#Explorer.DataFrame<
+  Polars[3 x 6]
+  Groups: ["team"]
+  team string ["A", "B", "C"]
+  Monday integer [10, nil, 15]
+  Tuesday integer [14, 9, nil]
+  Wednesday integer [nil, 16, 10]
+  Thursday integer [10, nil, 14]
+  Friday integer [16, 11, nil]
+>

In the following example the group "weekday" is going to be removed, because the column is going +to be pivoted in multiple columns:

iex> df = Explorer.DataFrame.new(
+iex>   weekday: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
+iex>   team: ["A", "B", "C", "A", "B", "C", "A", "B", "C", "A"],
+iex>   hour: [10, 9, 10, 10, 11, 15, 14, 16, 14, 16]
+iex> )
+iex> grouped = Explorer.DataFrame.group_by(df, "weekday")
+iex> Explorer.DataFrame.pivot_wider(grouped, "weekday", "hour")
+#Explorer.DataFrame<
+  Polars[3 x 6]
+  team string ["A", "B", "C"]
+  Monday integer [10, nil, 15]
+  Tuesday integer [14, 9, nil]
+  Wednesday integer [nil, 16, 10]
+  Thursday integer [10, nil, 14]
+  Friday integer [16, 11, nil]
+>
@@ -3328,19 +3328,19 @@

pull(df, column)

Examples -
iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.pull(df, "total")
-#Explorer.Series<
-  Polars[1094]
-  integer [2308, 1254, 32500, 141, 7924, 41, 143, 51246, 1150, 684, 106589, 18408, 8366, 451, 7981, 16345, 403, 17192, 30222, 147, 1388, 166, 133, 5802, 1278, 114468, 47, 2237, 12030, 535, 58, 1367, 145806, 152, 152, 72, 141, 19703, 2393248, 20773, 44, 540, 19, 2064, 1900, 5501, 10465, 2102, 30428, 18122, ...]
->
-
-iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.pull(df, 2)
-#Explorer.Series<
-  Polars[1094]
-  integer [2308, 1254, 32500, 141, 7924, 41, 143, 51246, 1150, 684, 106589, 18408, 8366, 451, 7981, 16345, 403, 17192, 30222, 147, 1388, 166, 133, 5802, 1278, 114468, 47, 2237, 12030, 535, 58, 1367, 145806, 152, 152, 72, 141, 19703, 2393248, 20773, 44, 540, 19, 2064, 1900, 5501, 10465, 2102, 30428, 18122, ...]
->
+
iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.pull(df, "total")
+#Explorer.Series<
+  Polars[1094]
+  integer [2308, 1254, 32500, 141, 7924, 41, 143, 51246, 1150, 684, 106589, 18408, 8366, 451, 7981, 16345, 403, 17192, 30222, 147, 1388, 166, 133, 5802, 1278, 114468, 47, 2237, 12030, 535, 58, 1367, 145806, 152, 152, 72, 141, 19703, 2393248, 20773, 44, 540, 19, 2064, 1900, 5501, 10465, 2102, 30428, 18122, ...]
+>
+
+iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.pull(df, 2)
+#Explorer.Series<
+  Polars[1094]
+  integer [2308, 1254, 32500, 141, 7924, 41, 143, 51246, 1150, 684, 106589, 18408, 8366, 451, 7981, 16345, 403, 17192, 30222, 147, 1388, 166, 133, 5802, 1278, 114468, 47, 2237, 12030, 535, 58, 1367, 145806, 152, 152, 72, 141, 19703, 2393248, 20773, 44, 540, 19, 2064, 1900, 5501, 10465, 2102, 30428, 18122, ...]
+>
@@ -3378,99 +3378,99 @@

put(df, column_name, series_or_tensor_or_li Examples

-
iex> df = Explorer.DataFrame.new(a: [1, 2, 3])
-iex> Explorer.DataFrame.put(df, :b, Explorer.Series.transform(df[:a], fn n -> n * 2 end))
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a integer [1, 2, 3]
-  b integer [2, 4, 6]
->
-
-iex> df = Explorer.DataFrame.new(a: [1, 2, 3])
-iex> Explorer.DataFrame.put(df, :b, Explorer.Series.from_list([4, 5, 6]))
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a integer [1, 2, 3]
-  b integer [4, 5, 6]
->

+
iex> df = Explorer.DataFrame.new(a: [1, 2, 3])
+iex> Explorer.DataFrame.put(df, :b, Explorer.Series.transform(df[:a], fn n -> n * 2 end))
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a integer [1, 2, 3]
+  b integer [2, 4, 6]
+>
+
+iex> df = Explorer.DataFrame.new(a: [1, 2, 3])
+iex> Explorer.DataFrame.put(df, :b, Explorer.Series.from_list([4, 5, 6]))
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a integer [1, 2, 3]
+  b integer [4, 5, 6]
+>

Grouped examples

If the dataframe is grouped, put/3 is going to ignore the groups. -So the series must be of the same size of the entire dataframe.

iex> df = Explorer.DataFrame.new(a: [1, 2, 3])
-iex> grouped = Explorer.DataFrame.group_by(df, "a")
-iex> series = Explorer.Series.from_list([9, 8, 7])
-iex> Explorer.DataFrame.put(grouped, :b, series)
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  Groups: ["a"]
-  a integer [1, 2, 3]
-  b integer [9, 8, 7]
->

+So the series must be of the same size of the entire dataframe.

iex> df = Explorer.DataFrame.new(a: [1, 2, 3])
+iex> grouped = Explorer.DataFrame.group_by(df, "a")
+iex> series = Explorer.Series.from_list([9, 8, 7])
+iex> Explorer.DataFrame.put(grouped, :b, series)
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  Groups: ["a"]
+  a integer [1, 2, 3]
+  b integer [9, 8, 7]
+>

Tensor examples

-

You can also put tensors into the dataframe:

iex> df = Explorer.DataFrame.new([])
-iex> Explorer.DataFrame.put(df, :a, Nx.tensor([1, 2, 3]))
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  a integer [1, 2, 3]
->

You can specify which dtype the tensor represents. +

You can also put tensors into the dataframe:

iex> df = Explorer.DataFrame.new([])
+iex> Explorer.DataFrame.put(df, :a, Nx.tensor([1, 2, 3]))
+#Explorer.DataFrame<
+  Polars[3 x 1]
+  a integer [1, 2, 3]
+>

You can specify which dtype the tensor represents. For example, a tensor of s64 represents integers by default, but it may also represent timestamps -in microseconds from the Unix epoch:

iex> df = Explorer.DataFrame.new([])
-iex> Explorer.DataFrame.put(df, :a, Nx.tensor([1, 2, 3]), dtype: :datetime)
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  a datetime [1970-01-01 00:00:00.000001, 1970-01-01 00:00:00.000002, 1970-01-01 00:00:00.000003]
->

If there is already a column where we want to place the tensor, +in microseconds from the Unix epoch:

iex> df = Explorer.DataFrame.new([])
+iex> Explorer.DataFrame.put(df, :a, Nx.tensor([1, 2, 3]), dtype: :datetime)
+#Explorer.DataFrame<
+  Polars[3 x 1]
+  a datetime [1970-01-01 00:00:00.000001, 1970-01-01 00:00:00.000002, 1970-01-01 00:00:00.000003]
+>

If there is already a column where we want to place the tensor, the column dtype will be automatically used, this means that updating dataframes in place while preserving their types is -straight-forward:

iex> df = Explorer.DataFrame.new(a: [~N[1970-01-01 00:00:00]])
-iex> Explorer.DataFrame.put(df, :a, Nx.tensor(529550625987654))
-#Explorer.DataFrame<
-  Polars[1 x 1]
-  a datetime [1986-10-13 01:23:45.987654]
->

This is particularly useful for categorical columns:

iex> cat = Explorer.Series.from_list(["foo", "bar", "baz"], dtype: :category)
-iex> df = Explorer.DataFrame.new(a: cat)
-iex> Explorer.DataFrame.put(df, :a, Nx.tensor([2, 1, 0]))
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  a category ["baz", "bar", "foo"]
->

On the other hand, if you try to put a floating tensor on +straight-forward:

iex> df = Explorer.DataFrame.new(a: [~N[1970-01-01 00:00:00]])
+iex> Explorer.DataFrame.put(df, :a, Nx.tensor(529550625987654))
+#Explorer.DataFrame<
+  Polars[1 x 1]
+  a datetime [1986-10-13 01:23:45.987654]
+>

This is particularly useful for categorical columns:

iex> cat = Explorer.Series.from_list(["foo", "bar", "baz"], dtype: :category)
+iex> df = Explorer.DataFrame.new(a: cat)
+iex> Explorer.DataFrame.put(df, :a, Nx.tensor([2, 1, 0]))
+#Explorer.DataFrame<
+  Polars[3 x 1]
+  a category ["baz", "bar", "foo"]
+>

On the other hand, if you try to put a floating tensor on an integer column, an error will be raised unless a dtype -or dtype: :infer is given:

iex> df = Explorer.DataFrame.new(a: [1, 2, 3])
-iex> Explorer.DataFrame.put(df, :a, Nx.tensor(1.0, type: :f64))
+or dtype: :infer is given:

iex> df = Explorer.DataFrame.new(a: [1, 2, 3])
+iex> Explorer.DataFrame.put(df, :a, Nx.tensor(1.0, type: :f64))
 ** (ArgumentError) dtype integer expects a tensor of type {:s, 64} but got type {:f, 64}
 
-iex> df = Explorer.DataFrame.new(a: [1, 2, 3])
-iex> Explorer.DataFrame.put(df, :a, Nx.tensor(1.0, type: :f64), dtype: :float)
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  a float [1.0, 1.0, 1.0]
->
-
-iex> df = Explorer.DataFrame.new(a: [1, 2, 3])
-iex> Explorer.DataFrame.put(df, :a, Nx.tensor(1.0, type: :f64), dtype: :infer)
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  a float [1.0, 1.0, 1.0]
->

+iex> df = Explorer.DataFrame.new(a: [1, 2, 3]) +iex> Explorer.DataFrame.put(df, :a, Nx.tensor(1.0, type: :f64), dtype: :float) +#Explorer.DataFrame< + Polars[3 x 1] + a float [1.0, 1.0, 1.0] +> + +iex> df = Explorer.DataFrame.new(a: [1, 2, 3]) +iex> Explorer.DataFrame.put(df, :a, Nx.tensor(1.0, type: :f64), dtype: :infer) +#Explorer.DataFrame< + Polars[3 x 1] + a float [1.0, 1.0, 1.0] +>

List examples

-

Similar to tensors, we can also put lists in the dataframe:

iex> df = Explorer.DataFrame.new([])
-iex> Explorer.DataFrame.put(df, :a, [1, 2, 3])
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  a integer [1, 2, 3]
->

The same considerations as above apply.

+

Similar to tensors, we can also put lists in the dataframe:

iex> df = Explorer.DataFrame.new([])
+iex> Explorer.DataFrame.put(df, :a, [1, 2, 3])
+#Explorer.DataFrame<
+  Polars[3 x 1]
+  a integer [1, 2, 3]
+>

The same considerations as above apply.

@@ -3517,30 +3517,30 @@

relocate(df, columns_or_column, opts)

Examples -

Relocate a single column

iex> df = Explorer.DataFrame.new(a: ["a", "b", "a"], b: [1, 3, 1], c: [nil, 5, 6])
-iex> Explorer.DataFrame.relocate(df, "a", after: "c")
-#Explorer.DataFrame<
-  Polars[3 x 3]
-  b integer [1, 3, 1]
-  c integer [nil, 5, 6]
-  a string ["a", "b", "a"]
->

Relocate (and reorder) multiple columns to the beginning

iex> df = Explorer.DataFrame.new(a: [1, 2], b: [5.1, 5.2], c: [4, 5], d: ["yes", "no"])
-iex> Explorer.DataFrame.relocate(df, ["d", 1], before: 0)
-#Explorer.DataFrame<
-  Polars[2 x 4]
-  d string ["yes", "no"]
-  b float [5.1, 5.2]
-  a integer [1, 2]
-  c integer [4, 5]
->

Relocate before another column

iex> df = Explorer.DataFrame.new(a: [1, 2], b: [5.1, 5.2], c: [4, 5], d: ["yes", "no"])
-iex> Explorer.DataFrame.relocate(df, ["a", "c"], before: "b")
-#Explorer.DataFrame<
-  Polars[2 x 4]
-  a integer [1, 2]
-  c integer [4, 5]
-  b float [5.1, 5.2]
-  d string ["yes", "no"]
->
+

Relocate a single column

iex> df = Explorer.DataFrame.new(a: ["a", "b", "a"], b: [1, 3, 1], c: [nil, 5, 6])
+iex> Explorer.DataFrame.relocate(df, "a", after: "c")
+#Explorer.DataFrame<
+  Polars[3 x 3]
+  b integer [1, 3, 1]
+  c integer [nil, 5, 6]
+  a string ["a", "b", "a"]
+>

Relocate (and reorder) multiple columns to the beginning

iex> df = Explorer.DataFrame.new(a: [1, 2], b: [5.1, 5.2], c: [4, 5], d: ["yes", "no"])
+iex> Explorer.DataFrame.relocate(df, ["d", 1], before: 0)
+#Explorer.DataFrame<
+  Polars[2 x 4]
+  d string ["yes", "no"]
+  b float [5.1, 5.2]
+  a integer [1, 2]
+  c integer [4, 5]
+>

Relocate before another column

iex> df = Explorer.DataFrame.new(a: [1, 2], b: [5.1, 5.2], c: [4, 5], d: ["yes", "no"])
+iex> Explorer.DataFrame.relocate(df, ["a", "c"], before: "b")
+#Explorer.DataFrame<
+  Polars[2 x 4]
+  a integer [1, 2]
+  c integer [4, 5]
+  b float [5.1, 5.2]
+  d string ["yes", "no"]
+>
@@ -3578,25 +3578,25 @@

rename(df, names)

Examples -

You can pass in a list of new names:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "a"], b: [1, 3, 1])
-iex> Explorer.DataFrame.rename(df, ["c", "d"])
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  c string ["a", "b", "a"]
-  d integer [1, 3, 1]
->

Or you can rename individual columns using keyword args:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "a"], b: [1, 3, 1])
-iex> Explorer.DataFrame.rename(df, a: "first")
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  first string ["a", "b", "a"]
-  b integer [1, 3, 1]
->

Or you can rename individual columns using a map:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "a"], b: [1, 3, 1])
-iex> Explorer.DataFrame.rename(df, %{"a" => "first"})
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  first string ["a", "b", "a"]
-  b integer [1, 3, 1]
->
+

You can pass in a list of new names:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "a"], b: [1, 3, 1])
+iex> Explorer.DataFrame.rename(df, ["c", "d"])
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  c string ["a", "b", "a"]
+  d integer [1, 3, 1]
+>

Or you can rename individual columns using keyword args:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "a"], b: [1, 3, 1])
+iex> Explorer.DataFrame.rename(df, a: "first")
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  first string ["a", "b", "a"]
+  b integer [1, 3, 1]
+>

Or you can rename individual columns using a map:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "a"], b: [1, 3, 1])
+iex> Explorer.DataFrame.rename(df, %{"a" => "first"})
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  first string ["a", "b", "a"]
+  b integer [1, 3, 1]
+>
@@ -3632,49 +3632,49 @@

rename_with(df, columns \\ 0..-1//1, callba Examples

-

If no columns are specified, it will apply the function to all column names:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.rename_with(df, &String.upcase/1)
-#Explorer.DataFrame<
-  Polars[1094 x 10]
-  YEAR integer [2010, 2010, 2010, 2010, 2010, ...]
-  COUNTRY string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
-  TOTAL integer [2308, 1254, 32500, 141, 7924, ...]
-  SOLID_FUEL integer [627, 117, 332, 0, 0, ...]
-  LIQUID_FUEL integer [1601, 953, 12381, 141, 3649, ...]
-  GAS_FUEL integer [74, 7, 14565, 0, 374, ...]
-  CEMENT integer [5, 177, 2598, 0, 204, ...]
-  GAS_FLARING integer [0, 0, 2623, 0, 3697, ...]
-  PER_CAPITA float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
-  BUNKER_FUELS integer [9, 7, 663, 0, 321, ...]
->

A callback can be used to filter the column names that will be renamed, similarly to select/2:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.rename_with(df, &String.ends_with?(&1, "_fuel"), &String.trim_trailing(&1, "_fuel"))
-#Explorer.DataFrame<
-  Polars[1094 x 10]
-  year integer [2010, 2010, 2010, 2010, 2010, ...]
-  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
-  total integer [2308, 1254, 32500, 141, 7924, ...]
-  solid integer [627, 117, 332, 0, 0, ...]
-  liquid integer [1601, 953, 12381, 141, 3649, ...]
-  gas integer [74, 7, 14565, 0, 374, ...]
-  cement integer [5, 177, 2598, 0, 204, ...]
-  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
-  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
-  bunker_fuels integer [9, 7, 663, 0, 321, ...]
->

Or you can just pass in the list of column names you'd like to apply the function to:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.rename_with(df, ["total", "cement"], &String.upcase/1)
-#Explorer.DataFrame<
-  Polars[1094 x 10]
-  year integer [2010, 2010, 2010, 2010, 2010, ...]
-  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
-  TOTAL integer [2308, 1254, 32500, 141, 7924, ...]
-  solid_fuel integer [627, 117, 332, 0, 0, ...]
-  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
-  gas_fuel integer [74, 7, 14565, 0, 374, ...]
-  CEMENT integer [5, 177, 2598, 0, 204, ...]
-  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
-  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
-  bunker_fuels integer [9, 7, 663, 0, 321, ...]
->

Ranges, regexes, and functions are also accepted in column names, as in select/2.

+

If no columns are specified, it will apply the function to all column names:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.rename_with(df, &String.upcase/1)
+#Explorer.DataFrame<
+  Polars[1094 x 10]
+  YEAR integer [2010, 2010, 2010, 2010, 2010, ...]
+  COUNTRY string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
+  TOTAL integer [2308, 1254, 32500, 141, 7924, ...]
+  SOLID_FUEL integer [627, 117, 332, 0, 0, ...]
+  LIQUID_FUEL integer [1601, 953, 12381, 141, 3649, ...]
+  GAS_FUEL integer [74, 7, 14565, 0, 374, ...]
+  CEMENT integer [5, 177, 2598, 0, 204, ...]
+  GAS_FLARING integer [0, 0, 2623, 0, 3697, ...]
+  PER_CAPITA float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
+  BUNKER_FUELS integer [9, 7, 663, 0, 321, ...]
+>

A callback can be used to filter the column names that will be renamed, similarly to select/2:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.rename_with(df, &String.ends_with?(&1, "_fuel"), &String.trim_trailing(&1, "_fuel"))
+#Explorer.DataFrame<
+  Polars[1094 x 10]
+  year integer [2010, 2010, 2010, 2010, 2010, ...]
+  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
+  total integer [2308, 1254, 32500, 141, 7924, ...]
+  solid integer [627, 117, 332, 0, 0, ...]
+  liquid integer [1601, 953, 12381, 141, 3649, ...]
+  gas integer [74, 7, 14565, 0, 374, ...]
+  cement integer [5, 177, 2598, 0, 204, ...]
+  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
+  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
+  bunker_fuels integer [9, 7, 663, 0, 321, ...]
+>

Or you can just pass in the list of column names you'd like to apply the function to:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.rename_with(df, ["total", "cement"], &String.upcase/1)
+#Explorer.DataFrame<
+  Polars[1094 x 10]
+  year integer [2010, 2010, 2010, 2010, 2010, ...]
+  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
+  TOTAL integer [2308, 1254, 32500, 141, 7924, ...]
+  solid_fuel integer [627, 117, 332, 0, 0, ...]
+  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
+  gas_fuel integer [74, 7, 14565, 0, 374, ...]
+  CEMENT integer [5, 177, 2598, 0, 204, ...]
+  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
+  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
+  bunker_fuels integer [9, 7, 663, 0, 321, ...]
+>

Ranges, regexes, and functions are also accepted in column names, as in select/2.

@@ -3709,61 +3709,61 @@

select(df, columns_or_column)

Examples -

You can select a single column:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
-iex> Explorer.DataFrame.select(df, "a")
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  a string ["a", "b", "c"]
->

Or a list of names:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
-iex> Explorer.DataFrame.select(df, ["a"])
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  a string ["a", "b", "c"]
->

You can also use a range or a list of integers:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3], c: [4, 5, 6])
-iex> Explorer.DataFrame.select(df, [0, 1])
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a string ["a", "b", "c"]
-  b integer [1, 2, 3]
->
-
-iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3], c: [4, 5, 6])
-iex> Explorer.DataFrame.select(df, 0..1)
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  a string ["a", "b", "c"]
-  b integer [1, 2, 3]
->

Or you can use a callback function that takes the dataframe's names as its first argument:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
-iex> Explorer.DataFrame.select(df, &String.starts_with?(&1, "b"))
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  b integer [1, 2, 3]
->

Or, if you prefer, a regex:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
-iex> Explorer.DataFrame.select(df, ~r/^b$/)
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  b integer [1, 2, 3]
->

Or a callback function that takes names and types:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
-iex> Explorer.DataFrame.select(df, fn _name, type -> type == :integer end)
-#Explorer.DataFrame<
-  Polars[3 x 1]
-  b integer [1, 2, 3]
->

+

You can select a single column:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
+iex> Explorer.DataFrame.select(df, "a")
+#Explorer.DataFrame<
+  Polars[3 x 1]
+  a string ["a", "b", "c"]
+>

Or a list of names:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
+iex> Explorer.DataFrame.select(df, ["a"])
+#Explorer.DataFrame<
+  Polars[3 x 1]
+  a string ["a", "b", "c"]
+>

You can also use a range or a list of integers:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3], c: [4, 5, 6])
+iex> Explorer.DataFrame.select(df, [0, 1])
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a string ["a", "b", "c"]
+  b integer [1, 2, 3]
+>
+
+iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3], c: [4, 5, 6])
+iex> Explorer.DataFrame.select(df, 0..1)
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  a string ["a", "b", "c"]
+  b integer [1, 2, 3]
+>

Or you can use a callback function that takes the dataframe's names as its first argument:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
+iex> Explorer.DataFrame.select(df, &String.starts_with?(&1, "b"))
+#Explorer.DataFrame<
+  Polars[3 x 1]
+  b integer [1, 2, 3]
+>

Or, if you prefer, a regex:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
+iex> Explorer.DataFrame.select(df, ~r/^b$/)
+#Explorer.DataFrame<
+  Polars[3 x 1]
+  b integer [1, 2, 3]
+>

Or a callback function that takes names and types:

iex> df = Explorer.DataFrame.new(a: ["a", "b", "c"], b: [1, 2, 3])
+iex> Explorer.DataFrame.select(df, fn _name, type -> type == :integer end)
+#Explorer.DataFrame<
+  Polars[3 x 1]
+  b integer [1, 2, 3]
+>

Grouped examples

Columns that are also groups cannot be removed, -you need to ungroup before removing these columns.

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.select(grouped, ["sepal_width"])
-#Explorer.DataFrame<
-  Polars[150 x 2]
-  Groups: ["species"]
-  sepal_width float [3.5, 3.0, 3.2, 3.1, 3.6, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
->
+you need to ungroup before removing these columns.

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.select(grouped, ["sepal_width"])
+#Explorer.DataFrame<
+  Polars[150 x 2]
+  Groups: ["species"]
+  sepal_width float [3.5, 3.0, 3.2, 3.1, 3.6, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+>
@@ -3798,29 +3798,29 @@

summarise(df, query)

Examples -
iex> df = Explorer.Datasets.fossil_fuels()
-iex> grouped_df = Explorer.DataFrame.group_by(df, "year")
-iex> Explorer.DataFrame.summarise(grouped_df, total_max: max(total), total_min: min(total))
-#Explorer.DataFrame<
-  Polars[5 x 3]
-  year integer [2010, 2011, 2012, 2013, 2014]
-  total_max integer [2393248, 2654360, 2734817, 2797384, 2806634]
-  total_min integer [1, 2, 2, 2, 3]
->

Suppose you want to get the mean petal length of each Iris species. You could do something -like this:

iex> df = Explorer.Datasets.iris()
-iex> grouped_df = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.summarise(grouped_df, mean_petal_length: mean(petal_length))
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  species string ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
-  mean_petal_length float [1.464, 4.26, 5.552]
->

In case aggregations for all the dataframe is what you want, you can use ungrouped -dataframes:

iex> df = Explorer.Datasets.iris()
-iex> Explorer.DataFrame.summarise(df, mean_petal_length: mean(petal_length))
-#Explorer.DataFrame<
-  Polars[1 x 1]
-  mean_petal_length float [3.758666666666667]
->
+
iex> df = Explorer.Datasets.fossil_fuels()
+iex> grouped_df = Explorer.DataFrame.group_by(df, "year")
+iex> Explorer.DataFrame.summarise(grouped_df, total_max: max(total), total_min: min(total))
+#Explorer.DataFrame<
+  Polars[5 x 3]
+  year integer [2010, 2011, 2012, 2013, 2014]
+  total_max integer [2393248, 2654360, 2734817, 2797384, 2806634]
+  total_min integer [1, 2, 2, 2, 3]
+>

Suppose you want to get the mean petal length of each Iris species. You could do something +like this:

iex> df = Explorer.Datasets.iris()
+iex> grouped_df = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.summarise(grouped_df, mean_petal_length: mean(petal_length))
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  species string ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
+  mean_petal_length float [1.464, 4.26, 5.552]
+>

In case aggregations for all the dataframe is what you want, you can use ungrouped +dataframes:

iex> df = Explorer.Datasets.iris()
+iex> Explorer.DataFrame.summarise(df, mean_petal_length: mean(petal_length))
+#Explorer.DataFrame<
+  Polars[1 x 1]
+  mean_petal_length float [3.758666666666667]
+>
@@ -3861,24 +3861,24 @@

summarise_with(df, fun)

Examples -
iex> alias Explorer.{DataFrame, Series}
-iex> df = Explorer.Datasets.fossil_fuels() |> DataFrame.group_by("year")
-iex> DataFrame.summarise_with(df, &[total_max: Series.max(&1["total"]), countries: Series.n_distinct(&1["country"])])
-#Explorer.DataFrame<
-  Polars[5 x 3]
-  year integer [2010, 2011, 2012, 2013, 2014]
-  total_max integer [2393248, 2654360, 2734817, 2797384, 2806634]
-  countries integer [217, 217, 220, 220, 220]
->
-
-iex> alias Explorer.{DataFrame, Series}
-iex> df = Explorer.Datasets.fossil_fuels()
-iex> DataFrame.summarise_with(df, &[total_max: Series.max(&1["total"]), countries: Series.n_distinct(&1["country"])])
-#Explorer.DataFrame<
-  Polars[1 x 2]
-  total_max integer [2806634]
-  countries integer [222]
->
+
iex> alias Explorer.{DataFrame, Series}
+iex> df = Explorer.Datasets.fossil_fuels() |> DataFrame.group_by("year")
+iex> DataFrame.summarise_with(df, &[total_max: Series.max(&1["total"]), countries: Series.n_distinct(&1["country"])])
+#Explorer.DataFrame<
+  Polars[5 x 3]
+  year integer [2010, 2011, 2012, 2013, 2014]
+  total_max integer [2393248, 2654360, 2734817, 2797384, 2806634]
+  countries integer [217, 217, 220, 220, 220]
+>
+
+iex> alias Explorer.{DataFrame, Series}
+iex> df = Explorer.Datasets.fossil_fuels()
+iex> DataFrame.summarise_with(df, &[total_max: Series.max(&1["total"]), countries: Series.n_distinct(&1["country"])])
+#Explorer.DataFrame<
+  Polars[1 x 2]
+  total_max integer [2806634]
+  countries integer [222]
+>
@@ -3916,38 +3916,38 @@

ungroup(df, groups \\ 0..-1//1)

Examples -

Ungroups all by default:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> df = Explorer.DataFrame.group_by(df, ["country", "year"])
-iex> Explorer.DataFrame.ungroup(df)
-#Explorer.DataFrame<
-  Polars[1094 x 10]
-  year integer [2010, 2010, 2010, 2010, 2010, ...]
-  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
-  total integer [2308, 1254, 32500, 141, 7924, ...]
-  solid_fuel integer [627, 117, 332, 0, 0, ...]
-  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
-  gas_fuel integer [74, 7, 14565, 0, 374, ...]
-  cement integer [5, 177, 2598, 0, 204, ...]
-  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
-  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
-  bunker_fuels integer [9, 7, 663, 0, 321, ...]
->

Ungrouping a single column:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> df = Explorer.DataFrame.group_by(df, ["country", "year"])
-iex> Explorer.DataFrame.ungroup(df, "country")
-#Explorer.DataFrame<
-  Polars[1094 x 10]
-  Groups: ["year"]
-  year integer [2010, 2010, 2010, 2010, 2010, ...]
-  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
-  total integer [2308, 1254, 32500, 141, 7924, ...]
-  solid_fuel integer [627, 117, 332, 0, 0, ...]
-  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
-  gas_fuel integer [74, 7, 14565, 0, 374, ...]
-  cement integer [5, 177, 2598, 0, 204, ...]
-  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
-  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
-  bunker_fuels integer [9, 7, 663, 0, 321, ...]
->

Lists, ranges, regexes, and functions are also accepted in column names, as in select/2.

+

Ungroups all by default:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> df = Explorer.DataFrame.group_by(df, ["country", "year"])
+iex> Explorer.DataFrame.ungroup(df)
+#Explorer.DataFrame<
+  Polars[1094 x 10]
+  year integer [2010, 2010, 2010, 2010, 2010, ...]
+  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
+  total integer [2308, 1254, 32500, 141, 7924, ...]
+  solid_fuel integer [627, 117, 332, 0, 0, ...]
+  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
+  gas_fuel integer [74, 7, 14565, 0, 374, ...]
+  cement integer [5, 177, 2598, 0, 204, ...]
+  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
+  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
+  bunker_fuels integer [9, 7, 663, 0, 321, ...]
+>

Ungrouping a single column:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> df = Explorer.DataFrame.group_by(df, ["country", "year"])
+iex> Explorer.DataFrame.ungroup(df, "country")
+#Explorer.DataFrame<
+  Polars[1094 x 10]
+  Groups: ["year"]
+  year integer [2010, 2010, 2010, 2010, 2010, ...]
+  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", ...]
+  total integer [2308, 1254, 32500, 141, 7924, ...]
+  solid_fuel integer [627, 117, 332, 0, 0, ...]
+  liquid_fuel integer [1601, 953, 12381, 141, 3649, ...]
+  gas_fuel integer [74, 7, 14565, 0, 374, ...]
+  cement integer [5, 177, 2598, 0, 204, ...]
+  gas_flaring integer [0, 0, 2623, 0, 3697, ...]
+  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37, ...]
+  bunker_fuels integer [9, 7, 663, 0, 321, ...]
+>

Lists, ranges, regexes, and functions are also accepted in column names, as in select/2.

@@ -3997,25 +3997,25 @@

concat_columns(dfs)

Examples -
iex> df1 = Explorer.DataFrame.new(x: [1, 2, 3], y: ["a", "b", "c"])
-iex> df2 = Explorer.DataFrame.new(z: [4, 5, 6], a: ["d", "e", "f"])
-iex> Explorer.DataFrame.concat_columns([df1, df2])
-#Explorer.DataFrame<
-  Polars[3 x 4]
-  x integer [1, 2, 3]
-  y string ["a", "b", "c"]
-  z integer [4, 5, 6]
-  a string ["d", "e", "f"]
->

Conflicting names are suffixed with the index of the dataframe in the array:

iex> df1 = Explorer.DataFrame.new(x: [1, 2, 3], y: ["a", "b", "c"])
-iex> df2 = Explorer.DataFrame.new(x: [4, 5, 6], a: ["d", "e", "f"])
-iex> Explorer.DataFrame.concat_columns([df1, df2])
-#Explorer.DataFrame<
-  Polars[3 x 4]
-  x integer [1, 2, 3]
-  y string ["a", "b", "c"]
-  x_1 integer [4, 5, 6]
-  a string ["d", "e", "f"]
->
+
iex> df1 = Explorer.DataFrame.new(x: [1, 2, 3], y: ["a", "b", "c"])
+iex> df2 = Explorer.DataFrame.new(z: [4, 5, 6], a: ["d", "e", "f"])
+iex> Explorer.DataFrame.concat_columns([df1, df2])
+#Explorer.DataFrame<
+  Polars[3 x 4]
+  x integer [1, 2, 3]
+  y string ["a", "b", "c"]
+  z integer [4, 5, 6]
+  a string ["d", "e", "f"]
+>

Conflicting names are suffixed with the index of the dataframe in the array:

iex> df1 = Explorer.DataFrame.new(x: [1, 2, 3], y: ["a", "b", "c"])
+iex> df2 = Explorer.DataFrame.new(x: [4, 5, 6], a: ["d", "e", "f"])
+iex> Explorer.DataFrame.concat_columns([df1, df2])
+#Explorer.DataFrame<
+  Polars[3 x 4]
+  x integer [1, 2, 3]
+  y string ["a", "b", "c"]
+  x_1 integer [4, 5, 6]
+  a string ["d", "e", "f"]
+>
@@ -4080,23 +4080,23 @@

concat_rows(dfs)

Examples -
iex> df1 = Explorer.DataFrame.new(x: [1, 2, 3], y: ["a", "b", "c"])
-iex> df2 = Explorer.DataFrame.new(x: [4, 5, 6], y: ["d", "e", "f"])
-iex> Explorer.DataFrame.concat_rows([df1, df2])
-#Explorer.DataFrame<
-  Polars[6 x 2]
-  x integer [1, 2, 3, 4, 5, ...]
-  y string ["a", "b", "c", "d", "e", ...]
->
-
-iex> df1 = Explorer.DataFrame.new(x: [1, 2, 3], y: ["a", "b", "c"])
-iex> df2 = Explorer.DataFrame.new(x: [4.2, 5.3, 6.4], y: ["d", "e", "f"])
-iex> Explorer.DataFrame.concat_rows([df1, df2])
-#Explorer.DataFrame<
-  Polars[6 x 2]
-  x float [1.0, 2.0, 3.0, 4.2, 5.3, ...]
-  y string ["a", "b", "c", "d", "e", ...]
->
+
iex> df1 = Explorer.DataFrame.new(x: [1, 2, 3], y: ["a", "b", "c"])
+iex> df2 = Explorer.DataFrame.new(x: [4, 5, 6], y: ["d", "e", "f"])
+iex> Explorer.DataFrame.concat_rows([df1, df2])
+#Explorer.DataFrame<
+  Polars[6 x 2]
+  x integer [1, 2, 3, 4, 5, ...]
+  y string ["a", "b", "c", "d", "e", ...]
+>
+
+iex> df1 = Explorer.DataFrame.new(x: [1, 2, 3], y: ["a", "b", "c"])
+iex> df2 = Explorer.DataFrame.new(x: [4.2, 5.3, 6.4], y: ["d", "e", "f"])
+iex> Explorer.DataFrame.concat_rows([df1, df2])
+#Explorer.DataFrame<
+  Polars[6 x 2]
+  x float [1.0, 2.0, 3.0, 4.2, 5.3, ...]
+  y string ["a", "b", "c", "d", "e", ...]
+>
@@ -4173,119 +4173,119 @@

join(left, right, opts \\ [])

Examples -

Inner join:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> right = Explorer.DataFrame.new(a: [1, 2, 2], c: ["d", "e", "f"])
-iex> Explorer.DataFrame.join(left, right)
-#Explorer.DataFrame<
-  Polars[3 x 3]
-  a integer [1, 2, 2]
-  b string ["a", "b", "b"]
-  c string ["d", "e", "f"]
->

Left join:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> right = Explorer.DataFrame.new(a: [1, 2, 2], c: ["d", "e", "f"])
-iex> Explorer.DataFrame.join(left, right, how: :left)
-#Explorer.DataFrame<
-  Polars[4 x 3]
-  a integer [1, 2, 2, 3]
-  b string ["a", "b", "b", "c"]
-  c string ["d", "e", "f", nil]
->

Right join:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> right = Explorer.DataFrame.new(a: [1, 2, 4], c: ["d", "e", "f"])
-iex> Explorer.DataFrame.join(left, right, how: :right)
-#Explorer.DataFrame<
-  Polars[3 x 3]
-  a integer [1, 2, 4]
-  c string ["d", "e", "f"]
-  b string ["a", "b", nil]
->

Outer join:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> right = Explorer.DataFrame.new(a: [1, 2, 4], c: ["d", "e", "f"])
-iex> Explorer.DataFrame.join(left, right, how: :outer)
-#Explorer.DataFrame<
-  Polars[4 x 3]
-  a integer [1, 2, 4, 3]
-  b string ["a", "b", nil, "c"]
-  c string ["d", "e", "f", nil]
->

Cross join:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> right = Explorer.DataFrame.new(a: [1, 2, 4], c: ["d", "e", "f"])
-iex> Explorer.DataFrame.join(left, right, how: :cross)
-#Explorer.DataFrame<
-  Polars[9 x 4]
-  a integer [1, 1, 1, 2, 2, ...]
-  b string ["a", "a", "a", "b", "b", ...]
-  a_right integer [1, 2, 4, 1, 2, ...]
-  c string ["d", "e", "f", "d", "e", ...]
->

Inner join with different names:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> right = Explorer.DataFrame.new(d: [1, 2, 2], c: ["d", "e", "f"])
-iex> Explorer.DataFrame.join(left, right, on: [{"a", "d"}])
-#Explorer.DataFrame<
-  Polars[3 x 3]
-  a integer [1, 2, 2]
-  b string ["a", "b", "b"]
-  c string ["d", "e", "f"]
->

+

Inner join:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> right = Explorer.DataFrame.new(a: [1, 2, 2], c: ["d", "e", "f"])
+iex> Explorer.DataFrame.join(left, right)
+#Explorer.DataFrame<
+  Polars[3 x 3]
+  a integer [1, 2, 2]
+  b string ["a", "b", "b"]
+  c string ["d", "e", "f"]
+>

Left join:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> right = Explorer.DataFrame.new(a: [1, 2, 2], c: ["d", "e", "f"])
+iex> Explorer.DataFrame.join(left, right, how: :left)
+#Explorer.DataFrame<
+  Polars[4 x 3]
+  a integer [1, 2, 2, 3]
+  b string ["a", "b", "b", "c"]
+  c string ["d", "e", "f", nil]
+>

Right join:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> right = Explorer.DataFrame.new(a: [1, 2, 4], c: ["d", "e", "f"])
+iex> Explorer.DataFrame.join(left, right, how: :right)
+#Explorer.DataFrame<
+  Polars[3 x 3]
+  a integer [1, 2, 4]
+  c string ["d", "e", "f"]
+  b string ["a", "b", nil]
+>

Outer join:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> right = Explorer.DataFrame.new(a: [1, 2, 4], c: ["d", "e", "f"])
+iex> Explorer.DataFrame.join(left, right, how: :outer)
+#Explorer.DataFrame<
+  Polars[4 x 3]
+  a integer [1, 2, 4, 3]
+  b string ["a", "b", nil, "c"]
+  c string ["d", "e", "f", nil]
+>

Cross join:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> right = Explorer.DataFrame.new(a: [1, 2, 4], c: ["d", "e", "f"])
+iex> Explorer.DataFrame.join(left, right, how: :cross)
+#Explorer.DataFrame<
+  Polars[9 x 4]
+  a integer [1, 1, 1, 2, 2, ...]
+  b string ["a", "a", "a", "b", "b", ...]
+  a_right integer [1, 2, 4, 1, 2, ...]
+  c string ["d", "e", "f", "d", "e", ...]
+>

Inner join with different names:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> right = Explorer.DataFrame.new(d: [1, 2, 2], c: ["d", "e", "f"])
+iex> Explorer.DataFrame.join(left, right, on: [{"a", "d"}])
+#Explorer.DataFrame<
+  Polars[3 x 3]
+  a integer [1, 2, 2]
+  b string ["a", "b", "b"]
+  c string ["d", "e", "f"]
+>

Grouped examples

When doing a join operation with grouped dataframes, the joined dataframe -may keep the groups from only one side.

An inner join operation will keep the groups from the left-hand side dataframe:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> right = Explorer.DataFrame.new(a: [1, 2, 2], c: ["d", "e", "f"])
-iex> grouped_left = Explorer.DataFrame.group_by(left, "b")
-iex> grouped_right = Explorer.DataFrame.group_by(right, "c")
-iex> Explorer.DataFrame.join(grouped_left, grouped_right)
-#Explorer.DataFrame<
-  Polars[3 x 3]
-  Groups: ["b"]
-  a integer [1, 2, 2]
-  b string ["a", "b", "b"]
-  c string ["d", "e", "f"]
->

A left join operation will keep the groups from the left-hand side dataframe:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> right = Explorer.DataFrame.new(a: [1, 2, 2], c: ["d", "e", "f"])
-iex> grouped_left = Explorer.DataFrame.group_by(left, "b")
-iex> grouped_right = Explorer.DataFrame.group_by(right, "c")
-iex> Explorer.DataFrame.join(grouped_left, grouped_right, how: :left)
-#Explorer.DataFrame<
-  Polars[4 x 3]
-  Groups: ["b"]
-  a integer [1, 2, 2, 3]
-  b string ["a", "b", "b", "c"]
-  c string ["d", "e", "f", nil]
->

A right join operation will keep the groups from the right-hand side dataframe:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> right = Explorer.DataFrame.new(a: [1, 2, 4], c: ["d", "e", "f"])
-iex> grouped_left = Explorer.DataFrame.group_by(left, "b")
-iex> grouped_right = Explorer.DataFrame.group_by(right, "c")
-iex> Explorer.DataFrame.join(grouped_left, grouped_right, how: :right)
-#Explorer.DataFrame<
-  Polars[3 x 3]
-  Groups: ["c"]
-  a integer [1, 2, 4]
-  c string ["d", "e", "f"]
-  b string ["a", "b", nil]
->

An outer join operation is going to keep the groups from the left-hand side dataframe:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> right = Explorer.DataFrame.new(a: [1, 2, 4], c: ["d", "e", "f"])
-iex> grouped_left = Explorer.DataFrame.group_by(left, "b")
-iex> grouped_right = Explorer.DataFrame.group_by(right, "c")
-iex> Explorer.DataFrame.join(grouped_left, grouped_right, how: :outer)
-#Explorer.DataFrame<
-  Polars[4 x 3]
-  Groups: ["b"]
-  a integer [1, 2, 4, 3]
-  b string ["a", "b", nil, "c"]
-  c string ["d", "e", "f", nil]
->

A cross join operation is going to keep the groups from the left-hand side dataframe:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> right = Explorer.DataFrame.new(a: [1, 2, 4], c: ["d", "e", "f"])
-iex> grouped_left = Explorer.DataFrame.group_by(left, "b")
-iex> grouped_right = Explorer.DataFrame.group_by(right, "c")
-iex> Explorer.DataFrame.join(grouped_left, grouped_right, how: :cross)
-#Explorer.DataFrame<
-  Polars[9 x 4]
-  Groups: ["b"]
-  a integer [1, 1, 1, 2, 2, ...]
-  b string ["a", "a", "a", "b", "b", ...]
-  a_right integer [1, 2, 4, 1, 2, ...]
-  c string ["d", "e", "f", "d", "e", ...]
->
+may keep the groups from only one side.

An inner join operation will keep the groups from the left-hand side dataframe:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> right = Explorer.DataFrame.new(a: [1, 2, 2], c: ["d", "e", "f"])
+iex> grouped_left = Explorer.DataFrame.group_by(left, "b")
+iex> grouped_right = Explorer.DataFrame.group_by(right, "c")
+iex> Explorer.DataFrame.join(grouped_left, grouped_right)
+#Explorer.DataFrame<
+  Polars[3 x 3]
+  Groups: ["b"]
+  a integer [1, 2, 2]
+  b string ["a", "b", "b"]
+  c string ["d", "e", "f"]
+>

A left join operation will keep the groups from the left-hand side dataframe:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> right = Explorer.DataFrame.new(a: [1, 2, 2], c: ["d", "e", "f"])
+iex> grouped_left = Explorer.DataFrame.group_by(left, "b")
+iex> grouped_right = Explorer.DataFrame.group_by(right, "c")
+iex> Explorer.DataFrame.join(grouped_left, grouped_right, how: :left)
+#Explorer.DataFrame<
+  Polars[4 x 3]
+  Groups: ["b"]
+  a integer [1, 2, 2, 3]
+  b string ["a", "b", "b", "c"]
+  c string ["d", "e", "f", nil]
+>

A right join operation will keep the groups from the right-hand side dataframe:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> right = Explorer.DataFrame.new(a: [1, 2, 4], c: ["d", "e", "f"])
+iex> grouped_left = Explorer.DataFrame.group_by(left, "b")
+iex> grouped_right = Explorer.DataFrame.group_by(right, "c")
+iex> Explorer.DataFrame.join(grouped_left, grouped_right, how: :right)
+#Explorer.DataFrame<
+  Polars[3 x 3]
+  Groups: ["c"]
+  a integer [1, 2, 4]
+  c string ["d", "e", "f"]
+  b string ["a", "b", nil]
+>

An outer join operation is going to keep the groups from the left-hand side dataframe:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> right = Explorer.DataFrame.new(a: [1, 2, 4], c: ["d", "e", "f"])
+iex> grouped_left = Explorer.DataFrame.group_by(left, "b")
+iex> grouped_right = Explorer.DataFrame.group_by(right, "c")
+iex> Explorer.DataFrame.join(grouped_left, grouped_right, how: :outer)
+#Explorer.DataFrame<
+  Polars[4 x 3]
+  Groups: ["b"]
+  a integer [1, 2, 4, 3]
+  b string ["a", "b", nil, "c"]
+  c string ["d", "e", "f", nil]
+>

A cross join operation is going to keep the groups from the left-hand side dataframe:

iex> left = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> right = Explorer.DataFrame.new(a: [1, 2, 4], c: ["d", "e", "f"])
+iex> grouped_left = Explorer.DataFrame.group_by(left, "b")
+iex> grouped_right = Explorer.DataFrame.group_by(right, "c")
+iex> Explorer.DataFrame.join(grouped_left, grouped_right, how: :cross)
+#Explorer.DataFrame<
+  Polars[9 x 4]
+  Groups: ["b"]
+  a integer [1, 1, 1, 2, 2, ...]
+  b string ["a", "a", "a", "b", "b", ...]
+  a_right integer [1, 2, 4, 1, 2, ...]
+  c string ["d", "e", "f", "d", "e", ...]
+>
@@ -4334,55 +4334,55 @@

head(df, nrows \\ 5)

Examples -
iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.head(df)
-#Explorer.DataFrame<
-  Polars[5 x 10]
-  year integer [2010, 2010, 2010, 2010, 2010]
-  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA"]
-  total integer [2308, 1254, 32500, 141, 7924]
-  solid_fuel integer [627, 117, 332, 0, 0]
-  liquid_fuel integer [1601, 953, 12381, 141, 3649]
-  gas_fuel integer [74, 7, 14565, 0, 374]
-  cement integer [5, 177, 2598, 0, 204]
-  gas_flaring integer [0, 0, 2623, 0, 3697]
-  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37]
-  bunker_fuels integer [9, 7, 663, 0, 321]
->
-
-iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.head(df, 2)
-#Explorer.DataFrame<
-  Polars[2 x 10]
-  year integer [2010, 2010]
-  country string ["AFGHANISTAN", "ALBANIA"]
-  total integer [2308, 1254]
-  solid_fuel integer [627, 117]
-  liquid_fuel integer [1601, 953]
-  gas_fuel integer [74, 7]
-  cement integer [5, 177]
-  gas_flaring integer [0, 0]
-  per_capita float [0.08, 0.43]
-  bunker_fuels integer [9, 7]
->

+
iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.head(df)
+#Explorer.DataFrame<
+  Polars[5 x 10]
+  year integer [2010, 2010, 2010, 2010, 2010]
+  country string ["AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA"]
+  total integer [2308, 1254, 32500, 141, 7924]
+  solid_fuel integer [627, 117, 332, 0, 0]
+  liquid_fuel integer [1601, 953, 12381, 141, 3649]
+  gas_fuel integer [74, 7, 14565, 0, 374]
+  cement integer [5, 177, 2598, 0, 204]
+  gas_flaring integer [0, 0, 2623, 0, 3697]
+  per_capita float [0.08, 0.43, 0.9, 1.68, 0.37]
+  bunker_fuels integer [9, 7, 663, 0, 321]
+>
+
+iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.head(df, 2)
+#Explorer.DataFrame<
+  Polars[2 x 10]
+  year integer [2010, 2010]
+  country string ["AFGHANISTAN", "ALBANIA"]
+  total integer [2308, 1254]
+  solid_fuel integer [627, 117]
+  liquid_fuel integer [1601, 953]
+  gas_fuel integer [74, 7]
+  cement integer [5, 177]
+  gas_flaring integer [0, 0]
+  per_capita float [0.08, 0.43]
+  bunker_fuels integer [9, 7]
+>

Grouped examples

Using grouped dataframes makes head/2 return n rows from each group. -Here is an example using the Iris dataset, and returning two rows from each group:

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.head(grouped, 2)
-#Explorer.DataFrame<
-  Polars[6 x 5]
-  Groups: ["species"]
-  sepal_length float [5.1, 4.9, 7.0, 6.4, 6.3, ...]
-  sepal_width float [3.5, 3.0, 3.2, 3.2, 3.3, ...]
-  petal_length float [1.4, 1.4, 4.7, 4.5, 6.0, ...]
-  petal_width float [0.2, 0.2, 1.4, 1.5, 2.5, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", "Iris-virginica", ...]
->
+Here is an example using the Iris dataset, and returning two rows from each group:

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.head(grouped, 2)
+#Explorer.DataFrame<
+  Polars[6 x 5]
+  Groups: ["species"]
+  sepal_length float [5.1, 4.9, 7.0, 6.4, 6.3, ...]
+  sepal_width float [3.5, 3.0, 3.2, 3.2, 3.3, ...]
+  petal_length float [1.4, 1.4, 4.7, 4.5, 6.0, ...]
+  petal_width float [0.2, 0.2, 1.4, 1.5, 2.5, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", "Iris-virginica", ...]
+>
@@ -4431,35 +4431,35 @@

sample(df, n_or_frac, opts \\ [])

Examples -

You can sample N rows:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.sample(df, 3, seed: 100)
-#Explorer.DataFrame<
-  Polars[3 x 10]
-  year integer [2011, 2012, 2011]
-  country string ["SERBIA", "FALKLAND ISLANDS (MALVINAS)", "SWAZILAND"]
-  total integer [13422, 15, 286]
-  solid_fuel integer [9355, 3, 102]
-  liquid_fuel integer [2537, 12, 184]
-  gas_fuel integer [1188, 0, 0]
-  cement integer [342, 0, 0]
-  gas_flaring integer [0, 0, 0]
-  per_capita float [1.49, 5.21, 0.24]
-  bunker_fuels integer [39, 0, 1]
->

Or you can sample a proportion of rows:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.sample(df, 0.03, seed: 100)
-#Explorer.DataFrame<
-  Polars[32 x 10]
-  year integer [2011, 2012, 2012, 2013, 2010, ...]
-  country string ["URUGUAY", "FRENCH POLYNESIA", "ICELAND", "PERU", "TUNISIA", ...]
-  total integer [2117, 222, 491, 15586, 7543, ...]
-  solid_fuel integer [1, 0, 96, 784, 15, ...]
-  liquid_fuel integer [1943, 222, 395, 7097, 3138, ...]
-  gas_fuel integer [40, 0, 0, 3238, 3176, ...]
-  cement integer [132, 0, 0, 1432, 1098, ...]
-  gas_flaring integer [0, 0, 0, 3036, 116, ...]
-  per_capita float [0.63, 0.81, 1.52, 0.51, 0.71, ...]
-  bunker_fuels integer [401, 45, 170, 617, 219, ...]
->

+

You can sample N rows:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.sample(df, 3, seed: 100)
+#Explorer.DataFrame<
+  Polars[3 x 10]
+  year integer [2011, 2012, 2011]
+  country string ["SERBIA", "FALKLAND ISLANDS (MALVINAS)", "SWAZILAND"]
+  total integer [13422, 15, 286]
+  solid_fuel integer [9355, 3, 102]
+  liquid_fuel integer [2537, 12, 184]
+  gas_fuel integer [1188, 0, 0]
+  cement integer [342, 0, 0]
+  gas_flaring integer [0, 0, 0]
+  per_capita float [1.49, 5.21, 0.24]
+  bunker_fuels integer [39, 0, 1]
+>

Or you can sample a proportion of rows:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.sample(df, 0.03, seed: 100)
+#Explorer.DataFrame<
+  Polars[32 x 10]
+  year integer [2011, 2012, 2012, 2013, 2010, ...]
+  country string ["URUGUAY", "FRENCH POLYNESIA", "ICELAND", "PERU", "TUNISIA", ...]
+  total integer [2117, 222, 491, 15586, 7543, ...]
+  solid_fuel integer [1, 0, 96, 784, 15, ...]
+  liquid_fuel integer [1943, 222, 395, 7097, 3138, ...]
+  gas_fuel integer [40, 0, 0, 3238, 3176, ...]
+  cement integer [132, 0, 0, 1432, 1098, ...]
+  gas_flaring integer [0, 0, 0, 3036, 116, ...]
+  per_capita float [0.63, 0.81, 1.52, 0.51, 0.71, ...]
+  bunker_fuels integer [401, 45, 170, 617, 219, ...]
+>

Grouped examples @@ -4467,30 +4467,30 @@

sample(df, n_or_frac, opts \\ [])

In the following example we have the Iris dataset grouped by species, and we want to take a sample of two plants from each group. Since we have three species, the -resultant dataframe is going to have six rows (2 * 3).

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.sample(grouped, 2, seed: 100)
-#Explorer.DataFrame<
-  Polars[6 x 5]
-  Groups: ["species"]
-  sepal_length float [5.3, 5.1, 5.1, 5.6, 6.2, ...]
-  sepal_width float [3.7, 3.8, 2.5, 2.7, 3.4, ...]
-  petal_length float [1.5, 1.9, 3.0, 4.2, 5.4, ...]
-  petal_width float [0.2, 0.4, 1.1, 1.3, 2.3, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", "Iris-virginica", ...]
->

The behaviour is similar when you want to take a fraction of the rows from each group. The main -difference is that each group can have more or less rows, depending on its size.

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.sample(grouped, 0.1, seed: 100)
-#Explorer.DataFrame<
-  Polars[15 x 5]
-  Groups: ["species"]
-  sepal_length float [5.3, 5.1, 4.7, 5.7, 5.1, ...]
-  sepal_width float [3.7, 3.8, 3.2, 3.8, 3.5, ...]
-  petal_length float [1.5, 1.9, 1.3, 1.7, 1.4, ...]
-  petal_width float [0.2, 0.4, 0.2, 0.3, 0.3, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
->
+resultant dataframe is going to have six rows (2 * 3).

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.sample(grouped, 2, seed: 100)
+#Explorer.DataFrame<
+  Polars[6 x 5]
+  Groups: ["species"]
+  sepal_length float [5.3, 5.1, 5.1, 5.6, 6.2, ...]
+  sepal_width float [3.7, 3.8, 2.5, 2.7, 3.4, ...]
+  petal_length float [1.5, 1.9, 3.0, 4.2, 5.4, ...]
+  petal_width float [0.2, 0.4, 1.1, 1.3, 2.3, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", "Iris-virginica", ...]
+>

The behaviour is similar when you want to take a fraction of the rows from each group. The main +difference is that each group can have more or less rows, depending on its size.

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.sample(grouped, 0.1, seed: 100)
+#Explorer.DataFrame<
+  Polars[15 x 5]
+  Groups: ["species"]
+  sepal_length float [5.3, 5.1, 4.7, 5.7, 5.1, ...]
+  sepal_width float [3.7, 3.8, 3.2, 3.8, 3.5, ...]
+  petal_length float [1.5, 1.9, 1.3, 1.7, 1.4, ...]
+  petal_width float [0.2, 0.4, 0.2, 0.3, 0.3, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+>
@@ -4533,21 +4533,21 @@

shuffle(df, opts \\ [])

Examples
-
iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.shuffle(df, seed: 100)
-#Explorer.DataFrame<
-  Polars[1094 x 10]
-  year integer [2014, 2014, 2014, 2012, 2010, ...]
-  country string ["ISRAEL", "ARGENTINA", "NETHERLANDS", "YEMEN", "GRENADA", ...]
-  total integer [17617, 55638, 45624, 5091, 71, ...]
-  solid_fuel integer [6775, 1588, 9070, 129, 0, ...]
-  liquid_fuel integer [6013, 25685, 18272, 4173, 71, ...]
-  gas_fuel integer [3930, 26368, 18010, 414, 0, ...]
-  cement integer [898, 1551, 272, 375, 0, ...]
-  gas_flaring integer [0, 446, 0, 0, 0, ...]
-  per_capita float [2.22, 1.29, 2.7, 0.2, 0.68, ...]
-  bunker_fuels integer [1011, 2079, 14210, 111, 4, ...]
->
+
iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.shuffle(df, seed: 100)
+#Explorer.DataFrame<
+  Polars[1094 x 10]
+  year integer [2014, 2014, 2014, 2012, 2010, ...]
+  country string ["ISRAEL", "ARGENTINA", "NETHERLANDS", "YEMEN", "GRENADA", ...]
+  total integer [17617, 55638, 45624, 5091, 71, ...]
+  solid_fuel integer [6775, 1588, 9070, 129, 0, ...]
+  liquid_fuel integer [6013, 25685, 18272, 4173, 71, ...]
+  gas_fuel integer [3930, 26368, 18010, 414, 0, ...]
+  cement integer [898, 1551, 272, 375, 0, ...]
+  gas_flaring integer [0, 446, 0, 0, 0, ...]
+  per_capita float [2.22, 1.29, 2.7, 0.2, 0.68, ...]
+  bunker_fuels integer [1011, 2079, 14210, 111, 4, ...]
+>
@@ -4581,31 +4581,31 @@

slice(df, row_indices)

Examples -
iex> df = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> Explorer.DataFrame.slice(df, [0, 2])
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  a integer [1, 3]
-  b string ["a", "c"]
->

With a series

iex> df = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> Explorer.DataFrame.slice(df, Explorer.Series.from_list([0, 2]))
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  a integer [1, 3]
-  b string ["a", "c"]
->

With a range:

iex> df = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> Explorer.DataFrame.slice(df, 1..2)
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  a integer [2, 3]
-  b string ["b", "c"]
->

With a range with negative first and last:

iex> df = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
-iex> Explorer.DataFrame.slice(df, -2..-1)
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  a integer [2, 3]
-  b string ["b", "c"]
->

+
iex> df = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> Explorer.DataFrame.slice(df, [0, 2])
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  a integer [1, 3]
+  b string ["a", "c"]
+>

With a series

iex> df = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> Explorer.DataFrame.slice(df, Explorer.Series.from_list([0, 2]))
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  a integer [1, 3]
+  b string ["a", "c"]
+>

With a range:

iex> df = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> Explorer.DataFrame.slice(df, 1..2)
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  a integer [2, 3]
+  b string ["b", "c"]
+>

With a range with negative first and last:

iex> df = Explorer.DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])
+iex> Explorer.DataFrame.slice(df, -2..-1)
+#Explorer.DataFrame<
+  Polars[2 x 2]
+  a integer [2, 3]
+  b string ["b", "c"]
+>

Grouped examples @@ -4613,30 +4613,30 @@

slice(df, row_indices)

We are going to once again use the Iris dataset. In this example we want to take elements at indexes -0 and 2:

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.slice(grouped, [0, 2])
-#Explorer.DataFrame<
-  Polars[6 x 5]
-  Groups: ["species"]
-  sepal_length float [5.1, 4.7, 7.0, 6.9, 6.3, ...]
-  sepal_width float [3.5, 3.2, 3.2, 3.1, 3.3, ...]
-  petal_length float [1.4, 1.3, 4.7, 4.9, 6.0, ...]
-  petal_width float [0.2, 0.2, 1.4, 1.5, 2.5, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", "Iris-virginica", ...]
->

Now we want to take the first 3 rows of each group. -This is going to work with the range 0..2:

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.slice(grouped, 0..2)
-#Explorer.DataFrame<
-  Polars[9 x 5]
-  Groups: ["species"]
-  sepal_length float [5.1, 4.9, 4.7, 7.0, 6.4, ...]
-  sepal_width float [3.5, 3.0, 3.2, 3.2, 3.2, ...]
-  petal_length float [1.4, 1.4, 1.3, 4.7, 4.5, ...]
-  petal_width float [0.2, 0.2, 0.2, 1.4, 1.5, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", ...]
->
+0 and 2:

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.slice(grouped, [0, 2])
+#Explorer.DataFrame<
+  Polars[6 x 5]
+  Groups: ["species"]
+  sepal_length float [5.1, 4.7, 7.0, 6.9, 6.3, ...]
+  sepal_width float [3.5, 3.2, 3.2, 3.1, 3.3, ...]
+  petal_length float [1.4, 1.3, 4.7, 4.9, 6.0, ...]
+  petal_width float [0.2, 0.2, 1.4, 1.5, 2.5, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", "Iris-virginica", ...]
+>

Now we want to take the first 3 rows of each group. +This is going to work with the range 0..2:

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.slice(grouped, 0..2)
+#Explorer.DataFrame<
+  Polars[9 x 5]
+  Groups: ["species"]
+  sepal_length float [5.1, 4.9, 4.7, 7.0, 6.4, ...]
+  sepal_width float [3.5, 3.0, 3.2, 3.2, 3.2, ...]
+  petal_length float [1.4, 1.4, 1.3, 4.7, 4.5, ...]
+  petal_width float [0.2, 0.2, 0.2, 1.4, 1.5, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", ...]
+>
@@ -4664,77 +4664,77 @@

slice(df, offset, length)

Examples
-
iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.slice(df, 1, 2)
-#Explorer.DataFrame<
-  Polars[2 x 10]
-  year integer [2010, 2010]
-  country string ["ALBANIA", "ALGERIA"]
-  total integer [1254, 32500]
-  solid_fuel integer [117, 332]
-  liquid_fuel integer [953, 12381]
-  gas_fuel integer [7, 14565]
-  cement integer [177, 2598]
-  gas_flaring integer [0, 2623]
-  per_capita float [0.43, 0.9]
-  bunker_fuels integer [7, 663]
->

Negative offsets count from the end of the series:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.slice(df, -10, 2)
-#Explorer.DataFrame<
-  Polars[2 x 10]
-  year integer [2014, 2014]
-  country string ["UNITED STATES OF AMERICA", "URUGUAY"]
-  total integer [1432855, 1840]
-  solid_fuel integer [450047, 2]
-  liquid_fuel integer [576531, 1700]
-  gas_fuel integer [390719, 25]
-  cement integer [11314, 112]
-  gas_flaring integer [4244, 0]
-  per_capita float [4.43, 0.54]
-  bunker_fuels integer [30722, 251]
->

If the length would run past the end of the dataframe, the result may be shorter than the length:

iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.slice(df, -10, 20)
-#Explorer.DataFrame<
-  Polars[10 x 10]
-  year integer [2014, 2014, 2014, 2014, 2014, ...]
-  country string ["UNITED STATES OF AMERICA", "URUGUAY", "UZBEKISTAN", "VANUATU", "VENEZUELA", ...]
-  total integer [1432855, 1840, 28692, 42, 50510, ...]
-  solid_fuel integer [450047, 2, 1677, 0, 204, ...]
-  liquid_fuel integer [576531, 1700, 2086, 42, 28445, ...]
-  gas_fuel integer [390719, 25, 23929, 0, 12731, ...]
-  cement integer [11314, 112, 1000, 0, 1088, ...]
-  gas_flaring integer [4244, 0, 0, 0, 8042, ...]
-  per_capita float [4.43, 0.54, 0.97, 0.16, 1.65, ...]
-  bunker_fuels integer [30722, 251, 0, 10, 1256, ...]
->

+
iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.slice(df, 1, 2)
+#Explorer.DataFrame<
+  Polars[2 x 10]
+  year integer [2010, 2010]
+  country string ["ALBANIA", "ALGERIA"]
+  total integer [1254, 32500]
+  solid_fuel integer [117, 332]
+  liquid_fuel integer [953, 12381]
+  gas_fuel integer [7, 14565]
+  cement integer [177, 2598]
+  gas_flaring integer [0, 2623]
+  per_capita float [0.43, 0.9]
+  bunker_fuels integer [7, 663]
+>

Negative offsets count from the end of the series:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.slice(df, -10, 2)
+#Explorer.DataFrame<
+  Polars[2 x 10]
+  year integer [2014, 2014]
+  country string ["UNITED STATES OF AMERICA", "URUGUAY"]
+  total integer [1432855, 1840]
+  solid_fuel integer [450047, 2]
+  liquid_fuel integer [576531, 1700]
+  gas_fuel integer [390719, 25]
+  cement integer [11314, 112]
+  gas_flaring integer [4244, 0]
+  per_capita float [4.43, 0.54]
+  bunker_fuels integer [30722, 251]
+>

If the length would run past the end of the dataframe, the result may be shorter than the length:

iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.slice(df, -10, 20)
+#Explorer.DataFrame<
+  Polars[10 x 10]
+  year integer [2014, 2014, 2014, 2014, 2014, ...]
+  country string ["UNITED STATES OF AMERICA", "URUGUAY", "UZBEKISTAN", "VANUATU", "VENEZUELA", ...]
+  total integer [1432855, 1840, 28692, 42, 50510, ...]
+  solid_fuel integer [450047, 2, 1677, 0, 204, ...]
+  liquid_fuel integer [576531, 1700, 2086, 42, 28445, ...]
+  gas_fuel integer [390719, 25, 23929, 0, 12731, ...]
+  cement integer [11314, 112, 1000, 0, 1088, ...]
+  gas_flaring integer [4244, 0, 0, 0, 8042, ...]
+  per_capita float [4.43, 0.54, 0.97, 0.16, 1.65, ...]
+  bunker_fuels integer [30722, 251, 0, 10, 1256, ...]
+>

Grouped examples

-

We want to take the first 3 rows of each group. We need the offset 0 and the length 3:

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.slice(grouped, 0, 3)
-#Explorer.DataFrame<
-  Polars[9 x 5]
-  Groups: ["species"]
-  sepal_length float [5.1, 4.9, 4.7, 7.0, 6.4, ...]
-  sepal_width float [3.5, 3.0, 3.2, 3.2, 3.2, ...]
-  petal_length float [1.4, 1.4, 1.3, 4.7, 4.5, ...]
-  petal_width float [0.2, 0.2, 0.2, 1.4, 1.5, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", ...]
->

We can also pass a negative offset:

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.slice(grouped, -6, 3)
-#Explorer.DataFrame<
-  Polars[9 x 5]
-  Groups: ["species"]
-  sepal_length float [5.1, 4.8, 5.1, 5.6, 5.7, ...]
-  sepal_width float [3.8, 3.0, 3.8, 2.7, 3.0, ...]
-  petal_length float [1.9, 1.4, 1.6, 4.2, 4.2, ...]
-  petal_width float [0.4, 0.3, 0.2, 1.3, 1.2, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", ...]
->
+

We want to take the first 3 rows of each group. We need the offset 0 and the length 3:

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.slice(grouped, 0, 3)
+#Explorer.DataFrame<
+  Polars[9 x 5]
+  Groups: ["species"]
+  sepal_length float [5.1, 4.9, 4.7, 7.0, 6.4, ...]
+  sepal_width float [3.5, 3.0, 3.2, 3.2, 3.2, ...]
+  petal_length float [1.4, 1.4, 1.3, 4.7, 4.5, ...]
+  petal_width float [0.2, 0.2, 0.2, 1.4, 1.5, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", ...]
+>

We can also pass a negative offset:

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.slice(grouped, -6, 3)
+#Explorer.DataFrame<
+  Polars[9 x 5]
+  Groups: ["species"]
+  sepal_length float [5.1, 4.8, 5.1, 5.6, 5.7, ...]
+  sepal_width float [3.8, 3.0, 3.8, 2.7, 3.0, ...]
+  petal_length float [1.9, 1.4, 1.6, 4.2, 4.2, ...]
+  petal_width float [0.4, 0.3, 0.2, 1.3, 1.2, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", ...]
+>
@@ -4771,55 +4771,55 @@

tail(df, nrows \\ 5)

Examples -
iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.tail(df)
-#Explorer.DataFrame<
-  Polars[5 x 10]
-  year integer [2014, 2014, 2014, 2014, 2014]
-  country string ["VIET NAM", "WALLIS AND FUTUNA ISLANDS", "YEMEN", "ZAMBIA", "ZIMBABWE"]
-  total integer [45517, 6, 6190, 1228, 3278]
-  solid_fuel integer [19246, 0, 137, 132, 2097]
-  liquid_fuel integer [12694, 6, 5090, 797, 1005]
-  gas_fuel integer [5349, 0, 581, 0, 0]
-  cement integer [8229, 0, 381, 299, 177]
-  gas_flaring integer [0, 0, 0, 0, 0]
-  per_capita float [0.49, 0.44, 0.24, 0.08, 0.22]
-  bunker_fuels integer [761, 1, 153, 33, 9]
->
-
-iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.tail(df, 2)
-#Explorer.DataFrame<
-  Polars[2 x 10]
-  year integer [2014, 2014]
-  country string ["ZAMBIA", "ZIMBABWE"]
-  total integer [1228, 3278]
-  solid_fuel integer [132, 2097]
-  liquid_fuel integer [797, 1005]
-  gas_fuel integer [0, 0]
-  cement integer [299, 177]
-  gas_flaring integer [0, 0]
-  per_capita float [0.08, 0.22]
-  bunker_fuels integer [33, 9]
->

+
iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.tail(df)
+#Explorer.DataFrame<
+  Polars[5 x 10]
+  year integer [2014, 2014, 2014, 2014, 2014]
+  country string ["VIET NAM", "WALLIS AND FUTUNA ISLANDS", "YEMEN", "ZAMBIA", "ZIMBABWE"]
+  total integer [45517, 6, 6190, 1228, 3278]
+  solid_fuel integer [19246, 0, 137, 132, 2097]
+  liquid_fuel integer [12694, 6, 5090, 797, 1005]
+  gas_fuel integer [5349, 0, 581, 0, 0]
+  cement integer [8229, 0, 381, 299, 177]
+  gas_flaring integer [0, 0, 0, 0, 0]
+  per_capita float [0.49, 0.44, 0.24, 0.08, 0.22]
+  bunker_fuels integer [761, 1, 153, 33, 9]
+>
+
+iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.tail(df, 2)
+#Explorer.DataFrame<
+  Polars[2 x 10]
+  year integer [2014, 2014]
+  country string ["ZAMBIA", "ZIMBABWE"]
+  total integer [1228, 3278]
+  solid_fuel integer [132, 2097]
+  liquid_fuel integer [797, 1005]
+  gas_fuel integer [0, 0]
+  cement integer [299, 177]
+  gas_flaring integer [0, 0]
+  per_capita float [0.08, 0.22]
+  bunker_fuels integer [33, 9]
+>

Grouped examples

Using grouped dataframes makes tail/2 return n rows from each group. -Here is an example using the Iris dataset, and returning two rows from each group:

iex> df = Explorer.Datasets.iris()
-iex> grouped = Explorer.DataFrame.group_by(df, "species")
-iex> Explorer.DataFrame.tail(grouped, 2)
-#Explorer.DataFrame<
-  Polars[6 x 5]
-  Groups: ["species"]
-  sepal_length float [5.3, 5.0, 5.1, 5.7, 6.2, ...]
-  sepal_width float [3.7, 3.3, 2.5, 2.8, 3.4, ...]
-  petal_length float [1.5, 1.4, 3.0, 4.1, 5.4, ...]
-  petal_width float [0.2, 0.2, 1.1, 1.3, 2.3, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", "Iris-virginica", ...]
->
+Here is an example using the Iris dataset, and returning two rows from each group:

iex> df = Explorer.Datasets.iris()
+iex> grouped = Explorer.DataFrame.group_by(df, "species")
+iex> Explorer.DataFrame.tail(grouped, 2)
+#Explorer.DataFrame<
+  Polars[6 x 5]
+  Groups: ["species"]
+  sepal_length float [5.3, 5.0, 5.1, 5.7, 6.2, ...]
+  sepal_width float [3.7, 3.3, 2.5, 2.8, 3.4, ...]
+  petal_length float [1.5, 1.4, 3.0, 4.1, 5.4, ...]
+  petal_width float [0.2, 0.2, 1.1, 1.3, 2.3, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-versicolor", "Iris-versicolor", "Iris-virginica", ...]
+>
@@ -4865,9 +4865,9 @@

dtypes(df)

Examples -
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, 2])
-iex> Explorer.DataFrame.dtypes(df)
-%{"floats" => :float, "ints" => :integer}
+
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, 2])
+iex> Explorer.DataFrame.dtypes(df)
+%{"floats" => :float, "ints" => :integer}
@@ -4901,14 +4901,14 @@

groups(data_frame)

Examples -
iex> df = Explorer.Datasets.fossil_fuels()
-iex> df = Explorer.DataFrame.group_by(df, "country")
-iex> Explorer.DataFrame.groups(df)
-["country"]
-
-iex> df = Explorer.Datasets.iris()
-iex> Explorer.DataFrame.groups(df)
-[]
+
iex> df = Explorer.Datasets.fossil_fuels()
+iex> df = Explorer.DataFrame.group_by(df, "country")
+iex> Explorer.DataFrame.groups(df)
+["country"]
+
+iex> df = Explorer.Datasets.iris()
+iex> Explorer.DataFrame.groups(df)
+[]
@@ -4942,8 +4942,8 @@

n_columns(df)

Examples -
iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.n_columns(df)
+
iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.n_columns(df)
 10
@@ -4979,8 +4979,8 @@

n_rows(df)

Examples -
iex> df = Explorer.Datasets.fossil_fuels()
-iex> Explorer.DataFrame.n_rows(df)
+
iex> df = Explorer.Datasets.fossil_fuels()
+iex> Explorer.DataFrame.n_rows(df)
 1094
@@ -5015,9 +5015,9 @@

names(df)

Examples -
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, 2])
-iex> Explorer.DataFrame.names(df)
-["floats", "ints"]
+
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0], ints: [1, 2])
+iex> Explorer.DataFrame.names(df)
+["floats", "ints"]
@@ -5052,9 +5052,9 @@

shape(df)

Examples -
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0, 3.0], ints: [1, 2, 3])
-iex> Explorer.DataFrame.shape(df)
-{3, 2}
+
iex> df = Explorer.DataFrame.new(floats: [1.0, 2.0, 3.0], ints: [1, 2, 3])
+iex> Explorer.DataFrame.shape(df)
+{3, 2}
@@ -5147,9 +5147,9 @@

dump_csv(df, opts \\ [])

Examples -
iex> df = Explorer.Datasets.fossil_fuels() |> Explorer.DataFrame.head(2)
-iex> Explorer.DataFrame.dump_csv(df)
-{:ok, "year,country,total,solid_fuel,liquid_fuel,gas_fuel,cement,gas_flaring,per_capita,bunker_fuels\n2010,AFGHANISTAN,2308,627,1601,74,5,0,0.08,9\n2010,ALBANIA,1254,117,953,7,177,0,0.43,7\n"}
+
iex> df = Explorer.Datasets.fossil_fuels() |> Explorer.DataFrame.head(2)
+iex> Explorer.DataFrame.dump_csv(df)
+{:ok, "year,country,total,solid_fuel,liquid_fuel,gas_fuel,cement,gas_flaring,per_capita,bunker_fuels\n2010,AFGHANISTAN,2308,627,1601,74,5,0,0.08,9\n2010,ALBANIA,1254,117,953,7,177,0,0.43,7\n"}
@@ -5348,9 +5348,9 @@

dump_ndjson(df)

Examples -
iex> df = Explorer.DataFrame.new(col_a: [1, 2], col_b: [5.1, 5.2])
-iex> Explorer.DataFrame.dump_ndjson(df)
-{:ok, ~s({"col_a":1,"col_b":5.1}\n{"col_a":2,"col_b":5.2}\n)}
+
iex> df = Explorer.DataFrame.new(col_a: [1, 2], col_b: [5.1, 5.2])
+iex> Explorer.DataFrame.dump_ndjson(df)
+{:ok, ~s({"col_a":1,"col_b":5.1}\n{"col_a":2,"col_b":5.2}\n)}
@@ -5841,24 +5841,24 @@

from_query(conn, query, params, opts \\ [])

In order to read data from a database, you must list :adbc as a dependency, download the relevant driver, and start both database and connection processes -in your supervision tree.

First, add :adbc as a dependency in your mix.exs:

{:adbc, "~> 0.1"}

Now, in your config/config.exs, configure the drivers you are going to use -(see Adbc module docs for more information on supported drivers):

config :adbc, :drivers, [:sqlite]

If you are using a notebook or scripting, you can also use Adbc.download_driver!/1 +in your supervision tree.

First, add :adbc as a dependency in your mix.exs:

{:adbc, "~> 0.1"}

Now, in your config/config.exs, configure the drivers you are going to use +(see Adbc module docs for more information on supported drivers):

config :adbc, :drivers, [:sqlite]

If you are using a notebook or scripting, you can also use Adbc.download_driver!/1 to dynamically download one.

Then start the database and the relevant connection processes in your -supervision tree:

children = [
-  {Adbc.Database,
+supervision tree:

children = [
+  {Adbc.Database,
    driver: :sqlite,
-   process_options: [name: MyApp.DB]},
-  {Adbc.Connection,
+   process_options: [name: MyApp.DB]},
+  {Adbc.Connection,
    database: MyApp.DB,
-   process_options: [name: MyApp.Conn]}
-]
+   process_options: [name: MyApp.Conn]}
+]
 
-Supervisor.start_link(children, strategy: :one_for_one)

In a notebook, the above would look like this:

db = Kino.start_child!({Adbc.Database, driver: :sqlite})
-conn = Kino.start_child!({Adbc.Connection, database: db})

And now you can make queries with:

# For named connections
-{:ok, _} = Explorer.DataFrame.from_query(MyApp.Conn, "SELECT 123")
+Supervisor.start_link(children, strategy: :one_for_one)

In a notebook, the above would look like this:

db = Kino.start_child!({Adbc.Database, driver: :sqlite})
+conn = Kino.start_child!({Adbc.Connection, database: db})

And now you can make queries with:

# For named connections
+{:ok, _} = Explorer.DataFrame.from_query(MyApp.Conn, "SELECT 123")
 
 # When using the conn PID directly
-{:ok, _} = Explorer.DataFrame.from_query(conn, "SELECT 123")

+{:ok, _} = Explorer.DataFrame.from_query(conn, "SELECT 123")

Options @@ -6178,12 +6178,12 @@

load_ndjson!(contents, opts \\ [])

iex> contents = ~s({"col_a":1,"col_b":5.1}\n{"col_a":2,"col_b":5.2}\n)
-iex> Explorer.DataFrame.load_ndjson!(contents)
-#Explorer.DataFrame<
-  Polars[2 x 2]
-  col_a integer [1, 2]
-  col_b float [5.1, 5.2]
->
+iex> Explorer.DataFrame.load_ndjson!(contents) +#Explorer.DataFrame< + Polars[2 x 2] + col_a integer [1, 2] + col_b float [5.1, 5.2] +>
diff --git a/Explorer.Datasets.html b/Explorer.Datasets.html index 331e8917f..9d2050a1f 100644 --- a/Explorer.Datasets.html +++ b/Explorer.Datasets.html @@ -117,7 +117,7 @@

in production. Therefore, if you need one of those datasets in production, you must download the source files to your own application priv directory and load them yourself. -For example:

Explorer.DataFrame.from_csv!(Application.app_dir(:my_app, "priv/iris.csv"))
+For example:

Explorer.DataFrame.from_csv!(Application.app_dir(:my_app, "priv/iris.csv"))

@@ -234,7 +234,7 @@

iris()

Citation -
Fisher,R. A.. (1988). Iris. UCI Machine Learning Repository. https://doi.org/10.24432/C56C76.
+
Fisher,R. A.. (1988). Iris. UCI Machine Learning Repository. https://doi.org/10.24432/C56C76.
@@ -265,7 +265,7 @@

wine()

Citation -
Aeberhard,Stefan and Forina,M.. (1991). Wine. UCI Machine Learning Repository. https://doi.org/10.24432/C5PC7J.
+
Aeberhard,Stefan and Forina,M.. (1991). Wine. UCI Machine Learning Repository. https://doi.org/10.24432/C5PC7J.
diff --git a/Explorer.Query.html b/Explorer.Query.html index c4c33079f..d643622fd 100644 --- a/Explorer.Query.html +++ b/Explorer.Query.html @@ -116,19 +116,19 @@

Explorer.DataFrame to DF as shown below:

alias Explorer.DataFrame, as: DF

Queries convert regular Elixir code which compile to efficient dataframes operations. Inside a query, only the limited set of Series operations are available and identifiers, such as strs -and nums, represent dataframe column names:

iex> df = DF.new(strs: ["a", "b", "c"], nums: [1, 2, 3])
-iex> DF.filter(df, nums > 2)
-#Explorer.DataFrame<
-  Polars[1 x 2]
-  strs string ["c"]
-  nums integer [3]
->

If a column has unusual format, you can either rename it before-hand, -or use col/1 inside queries:

iex> df = DF.new("unusual nums": [1, 2, 3])
-iex> DF.filter(df, col("unusual nums") > 2)
-#Explorer.DataFrame<
-  Polars[1 x 1]
-  unusual nums integer [3]
->

All operations from Explorer.Series are imported inside queries. +and nums, represent dataframe column names:

iex> df = DF.new(strs: ["a", "b", "c"], nums: [1, 2, 3])
+iex> DF.filter(df, nums > 2)
+#Explorer.DataFrame<
+  Polars[1 x 2]
+  strs string ["c"]
+  nums integer [3]
+>

If a column has unusual format, you can either rename it before-hand, +or use col/1 inside queries:

iex> df = DF.new("unusual nums": [1, 2, 3])
+iex> DF.filter(df, col("unusual nums") > 2)
+#Explorer.DataFrame<
+  Polars[1 x 1]
+  unusual nums integer [3]
+>

All operations from Explorer.Series are imported inside queries. This module also provides operators to use in queries, which are also imported into queries.

@@ -144,28 +144,28 @@

If you want to access variables defined outside of the query or get access to all Elixir constructs, you must use ^:

iex> min = 2
-iex> df = DF.new(strs: ["a", "b", "c"], nums: [1, 2, 3])
-iex> DF.filter(df, nums > ^min)
-#Explorer.DataFrame<
-  Polars[1 x 2]
-  strs string ["c"]
-  nums integer [3]
->
+iex> df = DF.new(strs: ["a", "b", "c"], nums: [1, 2, 3])
+iex> DF.filter(df, nums > ^min)
+#Explorer.DataFrame<
+  Polars[1 x 2]
+  strs string ["c"]
+  nums integer [3]
+>
 
 iex> min = 2
-iex> df = DF.new(strs: ["a", "b", "c"], nums: [1, 2, 3])
-iex> DF.filter(df, nums < ^if(min > 0, do: 10, else: -10))
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  strs string ["a", "b", "c"]
-  nums integer [1, 2, 3]
->

^ can be used with col to access columns dynamically:

iex> df = DF.new("unusual nums": [1, 2, 3])
+iex> df = DF.new(strs: ["a", "b", "c"], nums: [1, 2, 3])
+iex> DF.filter(df, nums < ^if(min > 0, do: 10, else: -10))
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  strs string ["a", "b", "c"]
+  nums integer [1, 2, 3]
+>

^ can be used with col to access columns dynamically:

iex> df = DF.new("unusual nums": [1, 2, 3])
 iex> name = "unusual nums"
-iex> DF.filter(df, col(^name) > 2)
-#Explorer.DataFrame<
-  Polars[1 x 1]
-  unusual nums integer [3]
->

+iex> DF.filter(df, col(^name) > 2) +#Explorer.DataFrame< + Polars[1 x 1] + unusual nums integer [3] +>

Across and comprehensions @@ -174,105 +174,105 @@

Explorer.Query leverages the power behind Elixir for-comprehensions to provide a powerful syntax for traversing several columns in a dataframe at once. For example, imagine you want to standardization the data on the -iris dataset, you could write this:

iex> iris = Explorer.Datasets.iris()
-iex> DF.mutate(iris,
-...>   sepal_width: (sepal_width - mean(sepal_width)) / variance(sepal_width),
-...>   sepal_length: (sepal_length - mean(sepal_length)) / variance(sepal_length),
-...>   petal_length: (petal_length - mean(petal_length)) / variance(petal_length),
-...>   petal_width: (petal_width - mean(petal_width)) / variance(petal_width)
-...> )
-#Explorer.DataFrame<
-  Polars[150 x 5]
-  sepal_length float [-1.0840606189132314, -1.3757361217598396, -1.6674116246064494, -1.8132493760297548, -1.2298983703365356, ...]
-  sepal_width float [2.372289612531505, -0.28722789030650403, 0.7765791108287006, 0.24467561026109824, 2.904193113099107, ...]
-  petal_length float [-0.7576391687443842, -0.7576391687443842, -0.7897606710936372, -0.725517666395131, -0.7576391687443842, ...]
-  petal_width float [-1.7147014356654704, -1.7147014356654704, -1.7147014356654704, -1.7147014356654704, -1.7147014356654704, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
->

While the code above does its job, it is quite repetitive. With across and for-comprehensions, -we could instead write:

iex> iris = Explorer.Datasets.iris()
-iex> DF.mutate(iris,
-...>   for col <- across(["sepal_width", "sepal_length", "petal_length", "petal_width"]) do
-...>     {col.name, (col - mean(col)) / variance(col)}
-...>   end
-...> )
-#Explorer.DataFrame<
-  Polars[150 x 5]
-  sepal_length float [-1.0840606189132314, -1.3757361217598396, -1.6674116246064494, -1.8132493760297548, -1.2298983703365356, ...]
-  sepal_width float [2.372289612531505, -0.28722789030650403, 0.7765791108287006, 0.24467561026109824, 2.904193113099107, ...]
-  petal_length float [-0.7576391687443842, -0.7576391687443842, -0.7897606710936372, -0.725517666395131, -0.7576391687443842, ...]
-  petal_width float [-1.7147014356654704, -1.7147014356654704, -1.7147014356654704, -1.7147014356654704, -1.7147014356654704, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
->

Which achieves the same result in a more concise and maintainable way. +iris dataset, you could write this:

iex> iris = Explorer.Datasets.iris()
+iex> DF.mutate(iris,
+...>   sepal_width: (sepal_width - mean(sepal_width)) / variance(sepal_width),
+...>   sepal_length: (sepal_length - mean(sepal_length)) / variance(sepal_length),
+...>   petal_length: (petal_length - mean(petal_length)) / variance(petal_length),
+...>   petal_width: (petal_width - mean(petal_width)) / variance(petal_width)
+...> )
+#Explorer.DataFrame<
+  Polars[150 x 5]
+  sepal_length float [-1.0840606189132314, -1.3757361217598396, -1.6674116246064494, -1.8132493760297548, -1.2298983703365356, ...]
+  sepal_width float [2.372289612531505, -0.28722789030650403, 0.7765791108287006, 0.24467561026109824, 2.904193113099107, ...]
+  petal_length float [-0.7576391687443842, -0.7576391687443842, -0.7897606710936372, -0.725517666395131, -0.7576391687443842, ...]
+  petal_width float [-1.7147014356654704, -1.7147014356654704, -1.7147014356654704, -1.7147014356654704, -1.7147014356654704, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+>

While the code above does its job, it is quite repetitive. With across and for-comprehensions, +we could instead write:

iex> iris = Explorer.Datasets.iris()
+iex> DF.mutate(iris,
+...>   for col <- across(["sepal_width", "sepal_length", "petal_length", "petal_width"]) do
+...>     {col.name, (col - mean(col)) / variance(col)}
+...>   end
+...> )
+#Explorer.DataFrame<
+  Polars[150 x 5]
+  sepal_length float [-1.0840606189132314, -1.3757361217598396, -1.6674116246064494, -1.8132493760297548, -1.2298983703365356, ...]
+  sepal_width float [2.372289612531505, -0.28722789030650403, 0.7765791108287006, 0.24467561026109824, 2.904193113099107, ...]
+  petal_length float [-0.7576391687443842, -0.7576391687443842, -0.7897606710936372, -0.725517666395131, -0.7576391687443842, ...]
+  petal_width float [-1.7147014356654704, -1.7147014356654704, -1.7147014356654704, -1.7147014356654704, -1.7147014356654704, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+>

Which achieves the same result in a more concise and maintainable way. across/1 may receive any of the following input as arguments:

  • a list of columns indexes or names as atoms and strings

  • a range

  • a regex that keeps only the names matching the regex

For example, since we know the width and length columns are the first four, -we could also have written (remember ranges in Elixir are inclusive):

DF.mutate(iris,
-  for col <- across(0..3) do
-    {col.name, (col - mean(col)) / variance(col)}
-  end
-)

Or using a regex:

DF.mutate(iris,
-  for col <- across(~r/(sepal|petal)_(length|width)/) do
-    {col.name, (col - mean(col)) / variance(col)}
-  end
-)

For those new to Elixir, for-comprehensions have the following format:

for PATTERN <- GENERATOR, FILTER do
+we could also have written (remember ranges in Elixir are inclusive):

DF.mutate(iris,
+  for col <- across(0..3) do
+    {col.name, (col - mean(col)) / variance(col)}
+  end
+)

Or using a regex:

DF.mutate(iris,
+  for col <- across(~r/(sepal|petal)_(length|width)/) do
+    {col.name, (col - mean(col)) / variance(col)}
+  end
+)

For those new to Elixir, for-comprehensions have the following format:

for PATTERN <- GENERATOR, FILTER do
   EXPR
-end

A comprehension filter is a mechanism that allows us to keep only columns +end

A comprehension filter is a mechanism that allows us to keep only columns based on additional properties, such as its dtype. A for-comprehension can have multiple generators and filters. For instance, if you want to apply standardization to all float columns, we can use across/0 to access all -columns and then use a filter to keep only the float ones:

iex> iris = Explorer.Datasets.iris()
-iex> DF.mutate(iris,
-...>   for col <- across(), col.dtype == :float do
-...>     {col.name, (col - mean(col)) / variance(col)}
-...>   end
-...> )
-#Explorer.DataFrame<
-  Polars[150 x 5]
-  sepal_length float [-1.0840606189132314, -1.3757361217598396, -1.6674116246064494, -1.8132493760297548, -1.2298983703365356, ...]
-  sepal_width float [2.372289612531505, -0.28722789030650403, 0.7765791108287006, 0.24467561026109824, 2.904193113099107, ...]
-  petal_length float [-0.7576391687443842, -0.7576391687443842, -0.7897606710936372, -0.725517666395131, -0.7576391687443842, ...]
-  petal_width float [-1.7147014356654704, -1.7147014356654704, -1.7147014356654704, -1.7147014356654704, -1.7147014356654704, ...]
-  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
->

For-comprehensions works with all dataframe verbs. As we have seen +columns and then use a filter to keep only the float ones:

iex> iris = Explorer.Datasets.iris()
+iex> DF.mutate(iris,
+...>   for col <- across(), col.dtype == :float do
+...>     {col.name, (col - mean(col)) / variance(col)}
+...>   end
+...> )
+#Explorer.DataFrame<
+  Polars[150 x 5]
+  sepal_length float [-1.0840606189132314, -1.3757361217598396, -1.6674116246064494, -1.8132493760297548, -1.2298983703365356, ...]
+  sepal_width float [2.372289612531505, -0.28722789030650403, 0.7765791108287006, 0.24467561026109824, 2.904193113099107, ...]
+  petal_length float [-0.7576391687443842, -0.7576391687443842, -0.7897606710936372, -0.725517666395131, -0.7576391687443842, ...]
+  petal_width float [-1.7147014356654704, -1.7147014356654704, -1.7147014356654704, -1.7147014356654704, -1.7147014356654704, ...]
+  species string ["Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", "Iris-setosa", ...]
+>

For-comprehensions works with all dataframe verbs. As we have seen above, for mutations we must return tuples as pair with the mutation name and its value. summarise works similarly. Note in both cases the name could also be generated dynamically. For example, to compute -the mean per species, you could write:

iex> Explorer.Datasets.iris()
-...> |> DF.group_by("species")
-...> |> DF.summarise(
-...>   for col <- across(), col.dtype == :float do
-...>     {"#{col.name}_mean", mean(col)}
-...>   end
-...> )
-#Explorer.DataFrame<
-  Polars[3 x 5]
-  species string ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
-  sepal_length_mean float [5.005999999999999, 5.936, 6.587999999999998]
-  sepal_width_mean float [3.4180000000000006, 2.7700000000000005, 2.9739999999999998]
-  petal_length_mean float [1.464, 4.26, 5.552]
-  petal_width_mean float [0.2439999999999999, 1.3259999999999998, 2.026]
->

arrange expects a list of columns to sort by, while for-comprehensions +the mean per species, you could write:

iex> Explorer.Datasets.iris()
+...> |> DF.group_by("species")
+...> |> DF.summarise(
+...>   for col <- across(), col.dtype == :float do
+...>     {"#{col.name}_mean", mean(col)}
+...>   end
+...> )
+#Explorer.DataFrame<
+  Polars[3 x 5]
+  species string ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]
+  sepal_length_mean float [5.005999999999999, 5.936, 6.587999999999998]
+  sepal_width_mean float [3.4180000000000006, 2.7700000000000005, 2.9739999999999998]
+  petal_length_mean float [1.464, 4.26, 5.552]
+  petal_width_mean float [0.2439999999999999, 1.3259999999999998, 2.026]
+>

arrange expects a list of columns to sort by, while for-comprehensions in filter generate a list of conditions, which are joined using and. For example, to filter all entries have both sepal and petal length above -average, using a filter on the column name, one could write:

iex> iris = Explorer.Datasets.iris()
-iex> DF.filter(iris,
-...>   for col <- across(), String.ends_with?(col.name, "_length") do
-...>     col > mean(col)
-...>   end
-...> )
-#Explorer.DataFrame<
-  Polars[70 x 5]
-  sepal_length float [7.0, 6.4, 6.9, 6.5, 6.3, ...]
-  sepal_width float [3.2, 3.2, 3.1, 2.8, 3.3, ...]
-  petal_length float [4.7, 4.5, 4.9, 4.6, 4.7, ...]
-  petal_width float [1.4, 1.5, 1.5, 1.5, 1.6, ...]
-  species string ["Iris-versicolor", "Iris-versicolor", "Iris-versicolor", "Iris-versicolor", "Iris-versicolor", ...]
->

Do not mix comprehension and queries

The filter inside a for-comprehension works at the meta level: +average, using a filter on the column name, one could write:

iex> iris = Explorer.Datasets.iris()
+iex> DF.filter(iris,
+...>   for col <- across(), String.ends_with?(col.name, "_length") do
+...>     col > mean(col)
+...>   end
+...> )
+#Explorer.DataFrame<
+  Polars[70 x 5]
+  sepal_length float [7.0, 6.4, 6.9, 6.5, 6.3, ...]
+  sepal_width float [3.2, 3.2, 3.1, 2.8, 3.3, ...]
+  petal_length float [4.7, 4.5, 4.9, 4.6, 4.7, ...]
+  petal_width float [1.4, 1.5, 1.5, 1.5, 1.6, ...]
+  species string ["Iris-versicolor", "Iris-versicolor", "Iris-versicolor", "Iris-versicolor", "Iris-versicolor", ...]
+>

Do not mix comprehension and queries

The filter inside a for-comprehension works at the meta level: it can only filter columns based on their names and dtypes, but not on their values. For example, this code does not make any -sense and it will fail to compile:

|> DF.filter(
-  for col <- across(), col > mean(col) do
+sense and it will fail to compile:

|> DF.filter(
+  for col <- across(), col > mean(col) do
     col
-  end
-end)

Another way to think about it, the comprehensions traverse on the + end +end)

Another way to think about it, the comprehensions traverse on the columns themselves, the contents inside the comprehension do-block traverse on the values inside the columns.

@@ -281,7 +281,7 @@

Queries simply become lazy dataframe operations at runtime. -For example, the following query

Explorer.DataFrame.filter(df, nums > 2)

is equivalent to

Explorer.DataFrame.filter_with(df, fn df -> Explorer.Series.greater(df["nums"], 2) end)

This means that, whenever you want to generate queries programatically, +For example, the following query

Explorer.DataFrame.filter(df, nums > 2)

is equivalent to

Explorer.DataFrame.filter_with(df, fn df -> Explorer.Series.greater(df["nums"], 2) end)

This means that, whenever you want to generate queries programatically, you can fallback to the regular _with APIs.

@@ -738,9 +738,9 @@

left <> right

Examples

-
DF.mutate(df, name: first_name <> " " <> last_name)

If you want to convert concatenate non-string +

DF.mutate(df, name: first_name <> " " <> last_name)

If you want to convert concatenate non-string series, you can explicitly cast them to string -before:

DF.mutate(df, name: cast(year, :string) <> "-" <> cast(month, :string))

Or use format:

DF.mutate(df, name: format([year, "-", month]))
+before:

DF.mutate(df, name: cast(year, :string) <> "-" <> cast(month, :string))

Or use format:

DF.mutate(df, name: format([year, "-", month]))
@@ -880,20 +880,20 @@

col(name)

Accesses a column by name.

If your column name contains whitespace or start with uppercase letters, you can still access its name by -using this macro:

iex> df = Explorer.DataFrame.new("unusual nums": [1, 2, 3])
-iex> Explorer.DataFrame.filter(df, col("unusual nums") > 2)
-#Explorer.DataFrame<
-  Polars[1 x 1]
-  unusual nums integer [3]
->

name must be an atom, a string, or an integer. +using this macro:

iex> df = Explorer.DataFrame.new("unusual nums": [1, 2, 3])
+iex> Explorer.DataFrame.filter(df, col("unusual nums") > 2)
+#Explorer.DataFrame<
+  Polars[1 x 1]
+  unusual nums integer [3]
+>

name must be an atom, a string, or an integer. It is equivalent to df[name] but inside a query.

This can also be used if you want to access a column -programatically, for example:

iex> df = Explorer.DataFrame.new(nums: [1, 2, 3])
+programatically, for example:

iex> df = Explorer.DataFrame.new(nums: [1, 2, 3])
 iex> name = :nums
-iex> Explorer.DataFrame.filter(df, col(^name) > 2)
-#Explorer.DataFrame<
-  Polars[1 x 1]
-  nums integer [3]
->

For traversing multiple columns programatically, +iex> Explorer.DataFrame.filter(df, col(^name) > 2) +#Explorer.DataFrame< + Polars[1 x 1] + nums integer [3] +>

For traversing multiple columns programatically, see across/0 and across/1.

diff --git a/Explorer.Series.html b/Explorer.Series.html index 0348838af..17ffd6c54 100644 --- a/Explorer.Series.html +++ b/Explorer.Series.html @@ -124,19 +124,19 @@

Creating series

-

Series can be created using from_list/2, from_binary/3, and friends:

Series can be made of numbers:

iex> Explorer.Series.from_list([1, 2, 3])
-#Explorer.Series<
-  Polars[3]
-  integer [1, 2, 3]
->

Series are nullable, so you may also include nils:

iex> Explorer.Series.from_list([1.0, nil, 2.5, 3.1])
-#Explorer.Series<
-  Polars[4]
-  float [1.0, nil, 2.5, 3.1]
->

Any of the dtypes above are supported, such as strings:

iex> Explorer.Series.from_list(["foo", "bar", "baz"])
-#Explorer.Series<
-  Polars[3]
-  string ["foo", "bar", "baz"]
->
+

Series can be created using from_list/2, from_binary/3, and friends:

Series can be made of numbers:

iex> Explorer.Series.from_list([1, 2, 3])
+#Explorer.Series<
+  Polars[3]
+  integer [1, 2, 3]
+>

Series are nullable, so you may also include nils:

iex> Explorer.Series.from_list([1.0, nil, 2.5, 3.1])
+#Explorer.Series<
+  Polars[4]
+  float [1.0, nil, 2.5, 3.1]
+>

Any of the dtypes above are supported, such as strings:

iex> Explorer.Series.from_list(["foo", "bar", "baz"])
+#Explorer.Series<
+  Polars[3]
+  string ["foo", "bar", "baz"]
+>
@@ -1743,36 +1743,36 @@

from_binary(binary, dtype, opts \\ [])

Examples -

Integers and floats follow their native encoding:

iex> Explorer.Series.from_binary(<<1.0::float-64-native, 2.0::float-64-native>>, :float)
-#Explorer.Series<
-  Polars[2]
-  float [1.0, 2.0]
->
-
-iex> Explorer.Series.from_binary(<<-1::signed-64-native, 1::signed-64-native>>, :integer)
-#Explorer.Series<
-  Polars[2]
-  integer [-1, 1]
->

Booleans are unsigned integers:

iex> Explorer.Series.from_binary(<<1, 0, 1>>, :boolean)
-#Explorer.Series<
-  Polars[3]
-  boolean [true, false, true]
->

Dates are encoded as i32 representing days from the Unix epoch (1970-01-01):

iex> binary = <<-719162::signed-32-native, 0::signed-32-native, 6129::signed-32-native>>
-iex> Explorer.Series.from_binary(binary, :date)
-#Explorer.Series<
-  Polars[3]
-  date [0001-01-01, 1970-01-01, 1986-10-13]
->

Times are encoded as i64 representing nanoseconds from midnight:

iex> binary = <<0::signed-64-native, 86399999999000::signed-64-native>>
-iex> Explorer.Series.from_binary(binary, :time)
-#Explorer.Series<
-  Polars[2]
-  time [00:00:00.000000, 23:59:59.999999]
->

Datetimes are encoded as i64 representing microseconds from the Unix epoch (1970-01-01):

iex> binary = <<0::signed-64-native, 529550625987654::signed-64-native>>
-iex> Explorer.Series.from_binary(binary, :datetime)
-#Explorer.Series<
-  Polars[2]
-  datetime [1970-01-01 00:00:00.000000, 1986-10-13 01:23:45.987654]
->
+

Integers and floats follow their native encoding:

iex> Explorer.Series.from_binary(<<1.0::float-64-native, 2.0::float-64-native>>, :float)
+#Explorer.Series<
+  Polars[2]
+  float [1.0, 2.0]
+>
+
+iex> Explorer.Series.from_binary(<<-1::signed-64-native, 1::signed-64-native>>, :integer)
+#Explorer.Series<
+  Polars[2]
+  integer [-1, 1]
+>

Booleans are unsigned integers:

iex> Explorer.Series.from_binary(<<1, 0, 1>>, :boolean)
+#Explorer.Series<
+  Polars[3]
+  boolean [true, false, true]
+>

Dates are encoded as i32 representing days from the Unix epoch (1970-01-01):

iex> binary = <<-719162::signed-32-native, 0::signed-32-native, 6129::signed-32-native>>
+iex> Explorer.Series.from_binary(binary, :date)
+#Explorer.Series<
+  Polars[3]
+  date [0001-01-01, 1970-01-01, 1986-10-13]
+>

Times are encoded as i64 representing nanoseconds from midnight:

iex> binary = <<0::signed-64-native, 86399999999000::signed-64-native>>
+iex> Explorer.Series.from_binary(binary, :time)
+#Explorer.Series<
+  Polars[2]
+  time [00:00:00.000000, 23:59:59.999999]
+>

Datetimes are encoded as i64 representing microseconds from the Unix epoch (1970-01-01):

iex> binary = <<0::signed-64-native, 529550625987654::signed-64-native>>
+iex> Explorer.Series.from_binary(binary, :datetime)
+#Explorer.Series<
+  Polars[2]
+  datetime [1970-01-01 00:00:00.000000, 1986-10-13 01:23:45.987654]
+>
@@ -1816,70 +1816,70 @@

from_list(list, opts \\ [])

Examples -

Explorer will infer the type from the values in the list:

iex> Explorer.Series.from_list([1, 2, 3])
-#Explorer.Series<
-  Polars[3]
-  integer [1, 2, 3]
->

Series are nullable, so you may also include nils:

iex> Explorer.Series.from_list([1.0, nil, 2.5, 3.1])
-#Explorer.Series<
-  Polars[4]
-  float [1.0, nil, 2.5, 3.1]
->

A mix of integers and floats will be cast to a float:

iex> Explorer.Series.from_list([1, 2.0])
-#Explorer.Series<
-  Polars[2]
-  float [1.0, 2.0]
->

Floats series can accept NaN, Inf, and -Inf values:

iex> Explorer.Series.from_list([1.0, 2.0, :nan, 4.0])
-#Explorer.Series<
-  Polars[4]
-  float [1.0, 2.0, NaN, 4.0]
->
-
-iex> Explorer.Series.from_list([1.0, 2.0, :infinity, 4.0])
-#Explorer.Series<
-  Polars[4]
-  float [1.0, 2.0, Inf, 4.0]
->
-
-iex> Explorer.Series.from_list([1.0, 2.0, :neg_infinity, 4.0])
-#Explorer.Series<
-  Polars[4]
-  float [1.0, 2.0, -Inf, 4.0]
->

Trying to create a "nil" series will, by default, result in a series of floats:

iex> Explorer.Series.from_list([nil, nil])
-#Explorer.Series<
-  Polars[2]
-  float [nil, nil]
->

You can specify the desired dtype for a series with the :dtype option.

iex> Explorer.Series.from_list([nil, nil], dtype: :integer)
-#Explorer.Series<
-  Polars[2]
-  integer [nil, nil]
->
-
-iex> Explorer.Series.from_list([1, nil], dtype: :string)
-#Explorer.Series<
-  Polars[2]
-  string ["1", nil]
->

The dtype option is particulary important if a :binary series is desired, because -by default binary series will have the dtype of :string:

iex> Explorer.Series.from_list([<<228, 146, 51>>, <<42, 209, 236>>], dtype: :binary)
-#Explorer.Series<
-  Polars[2]
-  binary [<<228, 146, 51>>, <<42, 209, 236>>]
->

A series mixing UTF8 strings and binaries is possible:

iex> Explorer.Series.from_list([<<228, 146, 51>>, "Elixir"], dtype: :binary)
-#Explorer.Series<
-  Polars[2]
-  binary [<<228, 146, 51>>, "Elixir"]
->

Another option is to create a categorical series from a list of strings:

iex> Explorer.Series.from_list(["EUA", "Brazil", "Poland"], dtype: :category)
-#Explorer.Series<
-  Polars[3]
-  category ["EUA", "Brazil", "Poland"]
->

It is possible to create a series of :datetime from a list of microseconds since Unix Epoch.

iex> Explorer.Series.from_list([1649883642 * 1_000 * 1_000], dtype: :datetime)
-#Explorer.Series<
-  Polars[1]
-  datetime [2022-04-13 21:00:42.000000]
->

It is possible to create a series of :time from a list of nanoseconds since midnight.

iex> Explorer.Series.from_list([123 * 1_000 * 1_000 * 1_000], dtype: :time)
-#Explorer.Series<
-  Polars[1]
-  time [00:02:03.000000]
->

Mixing non-numeric data types will raise an ArgumentError:

iex> Explorer.Series.from_list([1, "a"])
+

Explorer will infer the type from the values in the list:

iex> Explorer.Series.from_list([1, 2, 3])
+#Explorer.Series<
+  Polars[3]
+  integer [1, 2, 3]
+>

Series are nullable, so you may also include nils:

iex> Explorer.Series.from_list([1.0, nil, 2.5, 3.1])
+#Explorer.Series<
+  Polars[4]
+  float [1.0, nil, 2.5, 3.1]
+>

A mix of integers and floats will be cast to a float:

iex> Explorer.Series.from_list([1, 2.0])
+#Explorer.Series<
+  Polars[2]
+  float [1.0, 2.0]
+>

Floats series can accept NaN, Inf, and -Inf values:

iex> Explorer.Series.from_list([1.0, 2.0, :nan, 4.0])
+#Explorer.Series<
+  Polars[4]
+  float [1.0, 2.0, NaN, 4.0]
+>
+
+iex> Explorer.Series.from_list([1.0, 2.0, :infinity, 4.0])
+#Explorer.Series<
+  Polars[4]
+  float [1.0, 2.0, Inf, 4.0]
+>
+
+iex> Explorer.Series.from_list([1.0, 2.0, :neg_infinity, 4.0])
+#Explorer.Series<
+  Polars[4]
+  float [1.0, 2.0, -Inf, 4.0]
+>

Trying to create a "nil" series will, by default, result in a series of floats:

iex> Explorer.Series.from_list([nil, nil])
+#Explorer.Series<
+  Polars[2]
+  float [nil, nil]
+>

You can specify the desired dtype for a series with the :dtype option.

iex> Explorer.Series.from_list([nil, nil], dtype: :integer)
+#Explorer.Series<
+  Polars[2]
+  integer [nil, nil]
+>
+
+iex> Explorer.Series.from_list([1, nil], dtype: :string)
+#Explorer.Series<
+  Polars[2]
+  string ["1", nil]
+>

The dtype option is particulary important if a :binary series is desired, because +by default binary series will have the dtype of :string:

iex> Explorer.Series.from_list([<<228, 146, 51>>, <<42, 209, 236>>], dtype: :binary)
+#Explorer.Series<
+  Polars[2]
+  binary [<<228, 146, 51>>, <<42, 209, 236>>]
+>

A series mixing UTF8 strings and binaries is possible:

iex> Explorer.Series.from_list([<<228, 146, 51>>, "Elixir"], dtype: :binary)
+#Explorer.Series<
+  Polars[2]
+  binary [<<228, 146, 51>>, "Elixir"]
+>

Another option is to create a categorical series from a list of strings:

iex> Explorer.Series.from_list(["EUA", "Brazil", "Poland"], dtype: :category)
+#Explorer.Series<
+  Polars[3]
+  category ["EUA", "Brazil", "Poland"]
+>

It is possible to create a series of :datetime from a list of microseconds since Unix Epoch.

iex> Explorer.Series.from_list([1649883642 * 1_000 * 1_000], dtype: :datetime)
+#Explorer.Series<
+  Polars[1]
+  datetime [2022-04-13 21:00:42.000000]
+>

It is possible to create a series of :time from a list of nanoseconds since midnight.

iex> Explorer.Series.from_list([123 * 1_000 * 1_000 * 1_000], dtype: :time)
+#Explorer.Series<
+  Polars[1]
+  time [00:02:03.000000]
+>

Mixing non-numeric data types will raise an ArgumentError:

iex> Explorer.Series.from_list([1, "a"])
 ** (ArgumentError) the value "a" does not match the inferred series dtype :integer
@@ -1922,40 +1922,40 @@

from_tensor(tensor, opts \\ [])

Examples -

Integers and floats:

iex> tensor = Nx.tensor([1, 2, 3])
-iex> Explorer.Series.from_tensor(tensor)
-#Explorer.Series<
-  Polars[3]
-  integer [1, 2, 3]
->
-
-iex> tensor = Nx.tensor([1.0, 2.0, 3.0], type: :f64)
-iex> Explorer.Series.from_tensor(tensor)
-#Explorer.Series<
-  Polars[3]
-  float [1.0, 2.0, 3.0]
->

Unsigned 8-bit tensors are assumed to be booleans:

iex> tensor = Nx.tensor([1, 0, 1], type: :u8)
-iex> Explorer.Series.from_tensor(tensor)
-#Explorer.Series<
-  Polars[3]
-  boolean [true, false, true]
->

Signed 32-bit tensors are assumed to be dates:

iex> tensor = Nx.tensor([-719162, 0, 6129], type: :s32)
-iex> Explorer.Series.from_tensor(tensor)
-#Explorer.Series<
-  Polars[3]
-  date [0001-01-01, 1970-01-01, 1986-10-13]
->

Times are signed 64-bit representing nanoseconds from midnight and -therefore must have their dtype explicitly given:

iex> tensor = Nx.tensor([0, 86399999999000])
-iex> Explorer.Series.from_tensor(tensor, dtype: :time)
-#Explorer.Series<
-  Polars[2]
-  time [00:00:00.000000, 23:59:59.999999]
->

Datetimes are signed 64-bit and therefore must have their dtype explicitly given:

iex> tensor = Nx.tensor([0, 529550625987654])
-iex> Explorer.Series.from_tensor(tensor, dtype: :datetime)
-#Explorer.Series<
-  Polars[2]
-  datetime [1970-01-01 00:00:00.000000, 1986-10-13 01:23:45.987654]
->
+

Integers and floats:

iex> tensor = Nx.tensor([1, 2, 3])
+iex> Explorer.Series.from_tensor(tensor)
+#Explorer.Series<
+  Polars[3]
+  integer [1, 2, 3]
+>
+
+iex> tensor = Nx.tensor([1.0, 2.0, 3.0], type: :f64)
+iex> Explorer.Series.from_tensor(tensor)
+#Explorer.Series<
+  Polars[3]
+  float [1.0, 2.0, 3.0]
+>

Unsigned 8-bit tensors are assumed to be booleans:

iex> tensor = Nx.tensor([1, 0, 1], type: :u8)
+iex> Explorer.Series.from_tensor(tensor)
+#Explorer.Series<
+  Polars[3]
+  boolean [true, false, true]
+>

Signed 32-bit tensors are assumed to be dates:

iex> tensor = Nx.tensor([-719162, 0, 6129], type: :s32)
+iex> Explorer.Series.from_tensor(tensor)
+#Explorer.Series<
+  Polars[3]
+  date [0001-01-01, 1970-01-01, 1986-10-13]
+>

Times are signed 64-bit representing nanoseconds from midnight and +therefore must have their dtype explicitly given:

iex> tensor = Nx.tensor([0, 86399999999000])
+iex> Explorer.Series.from_tensor(tensor, dtype: :time)
+#Explorer.Series<
+  Polars[2]
+  time [00:00:00.000000, 23:59:59.999999]
+>

Datetimes are signed 64-bit and therefore must have their dtype explicitly given:

iex> tensor = Nx.tensor([0, 529550625987654])
+iex> Explorer.Series.from_tensor(tensor, dtype: :datetime)
+#Explorer.Series<
+  Polars[2]
+  datetime [1970-01-01 00:00:00.000000, 1986-10-13 01:23:45.987654]
+>
@@ -1991,28 +1991,28 @@

replace(series, tensor_or_list)

Tensor examples -
iex> s = Explorer.Series.from_list([0, 1, 2])
-iex> Explorer.Series.replace(s, Nx.tensor([1, 2, 3]))
-#Explorer.Series<
-  Polars[3]
-  integer [1, 2, 3]
->

This is particularly useful for categorical columns:

iex> s = Explorer.Series.from_list(["foo", "bar", "baz"], dtype: :category)
-iex> Explorer.Series.replace(s, Nx.tensor([2, 1, 0]))
-#Explorer.Series<
-  Polars[3]
-  category ["baz", "bar", "foo"]
->

+
iex> s = Explorer.Series.from_list([0, 1, 2])
+iex> Explorer.Series.replace(s, Nx.tensor([1, 2, 3]))
+#Explorer.Series<
+  Polars[3]
+  integer [1, 2, 3]
+>

This is particularly useful for categorical columns:

iex> s = Explorer.Series.from_list(["foo", "bar", "baz"], dtype: :category)
+iex> Explorer.Series.replace(s, Nx.tensor([2, 1, 0]))
+#Explorer.Series<
+  Polars[3]
+  category ["baz", "bar", "foo"]
+>

List examples

-

Similar to tensors, we can also replace by lists:

iex> s = Explorer.Series.from_list([0, 1, 2])
-iex> Explorer.Series.replace(s, [1, 2, 3, 4, 5])
-#Explorer.Series<
-  Polars[5]
-  integer [1, 2, 3, 4, 5]
->

The same considerations as above apply.

+

Similar to tensors, we can also replace by lists:

iex> s = Explorer.Series.from_list([0, 1, 2])
+iex> Explorer.Series.replace(s, [1, 2, 3, 4, 5])
+#Explorer.Series<
+  Polars[5]
+  integer [1, 2, 3, 4, 5]
+>

The same considerations as above apply.

@@ -2047,13 +2047,13 @@

to_binary(series)

Examples -
iex> series = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.to_binary(series)
-<<1::signed-64-native, 2::signed-64-native, 3::signed-64-native>>
+
iex> series = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.to_binary(series)
+<<1::signed-64-native, 2::signed-64-native, 3::signed-64-native>>
 
-iex> series = Explorer.Series.from_list([true, false, true])
-iex> Explorer.Series.to_binary(series)
-<<1, 0, 1>>
+
iex> series = Explorer.Series.from_list([true, false, true]) +iex> Explorer.Series.to_binary(series) +<<1, 0, 1>>
@@ -2090,9 +2090,9 @@

to_enum(series)

Examples -
iex> series = Explorer.Series.from_list([1, 2, 3])
-iex> series |> Explorer.Series.to_enum() |> Enum.to_list()
-[1, 2, 3]
+
iex> series = Explorer.Series.from_list([1, 2, 3])
+iex> series |> Explorer.Series.to_enum() |> Enum.to_list()
+[1, 2, 3]
@@ -2131,27 +2131,27 @@

to_iovec(series)

Examples -

Integers and floats follow their native encoding:

iex> series = Explorer.Series.from_list([-1, 0, 1])
-iex> Explorer.Series.to_iovec(series)
-[<<-1::signed-64-native, 0::signed-64-native, 1::signed-64-native>>]
-
-iex> series = Explorer.Series.from_list([1.0, 2.0, 3.0])
-iex> Explorer.Series.to_iovec(series)
-[<<1.0::float-64-native, 2.0::float-64-native, 3.0::float-64-native>>]

Booleans are encoded as 0 and 1:

iex> series = Explorer.Series.from_list([true, false, true])
-iex> Explorer.Series.to_iovec(series)
-[<<1, 0, 1>>]

Dates are encoded as i32 representing days from the Unix epoch (1970-01-01):

iex> series = Explorer.Series.from_list([~D[0001-01-01], ~D[1970-01-01], ~D[1986-10-13]])
-iex> Explorer.Series.to_iovec(series)
-[<<-719162::signed-32-native, 0::signed-32-native, 6129::signed-32-native>>]

Times are encoded as i64 representing nanoseconds from midnight:

iex> series = Explorer.Series.from_list([~T[00:00:00.000000], ~T[23:59:59.999999]])
-iex> Explorer.Series.to_iovec(series)
-[<<0::signed-64-native, 86399999999000::signed-64-native>>]

Datetimes are encoded as i64 representing microseconds from the Unix epoch (1970-01-01):

iex> series = Explorer.Series.from_list([~N[0001-01-01 00:00:00], ~N[1970-01-01 00:00:00], ~N[1986-10-13 01:23:45.987654]])
-iex> Explorer.Series.to_iovec(series)
-[<<-62135596800000000::signed-64-native, 0::signed-64-native, 529550625987654::signed-64-native>>]

The operation raises for binaries and strings, as they do not provide a fixed-width -binary representation:

iex> s = Explorer.Series.from_list(["a", "b", "c", "b"])
-iex> Explorer.Series.to_iovec(s)
+

Integers and floats follow their native encoding:

iex> series = Explorer.Series.from_list([-1, 0, 1])
+iex> Explorer.Series.to_iovec(series)
+[<<-1::signed-64-native, 0::signed-64-native, 1::signed-64-native>>]
+
+iex> series = Explorer.Series.from_list([1.0, 2.0, 3.0])
+iex> Explorer.Series.to_iovec(series)
+[<<1.0::float-64-native, 2.0::float-64-native, 3.0::float-64-native>>]

Booleans are encoded as 0 and 1:

iex> series = Explorer.Series.from_list([true, false, true])
+iex> Explorer.Series.to_iovec(series)
+[<<1, 0, 1>>]

Dates are encoded as i32 representing days from the Unix epoch (1970-01-01):

iex> series = Explorer.Series.from_list([~D[0001-01-01], ~D[1970-01-01], ~D[1986-10-13]])
+iex> Explorer.Series.to_iovec(series)
+[<<-719162::signed-32-native, 0::signed-32-native, 6129::signed-32-native>>]

Times are encoded as i64 representing nanoseconds from midnight:

iex> series = Explorer.Series.from_list([~T[00:00:00.000000], ~T[23:59:59.999999]])
+iex> Explorer.Series.to_iovec(series)
+[<<0::signed-64-native, 86399999999000::signed-64-native>>]

Datetimes are encoded as i64 representing microseconds from the Unix epoch (1970-01-01):

iex> series = Explorer.Series.from_list([~N[0001-01-01 00:00:00], ~N[1970-01-01 00:00:00], ~N[1986-10-13 01:23:45.987654]])
+iex> Explorer.Series.to_iovec(series)
+[<<-62135596800000000::signed-64-native, 0::signed-64-native, 529550625987654::signed-64-native>>]

The operation raises for binaries and strings, as they do not provide a fixed-width +binary representation:

iex> s = Explorer.Series.from_list(["a", "b", "c", "b"])
+iex> Explorer.Series.to_iovec(s)
 ** (ArgumentError) cannot convert series of dtype :string into iovec

However, if appropriate, you can convert them to categorical types, -which will then return the index of each category:

iex> series = Explorer.Series.from_list(["a", "b", "c", "b"], dtype: :category)
-iex> Explorer.Series.to_iovec(series)
-[<<0::unsigned-32-native, 1::unsigned-32-native, 2::unsigned-32-native, 1::unsigned-32-native>>]
+which will then return the index of each category:

iex> series = Explorer.Series.from_list(["a", "b", "c", "b"], dtype: :category)
+iex> Explorer.Series.to_iovec(series)
+[<<0::unsigned-32-native, 1::unsigned-32-native, 2::unsigned-32-native, 1::unsigned-32-native>>]
@@ -2188,9 +2188,9 @@

to_list(series)

Examples -
iex> series = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.to_list(series)
-[1, 2, 3]
+
iex> series = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.to_list(series)
+[1, 2, 3]
@@ -2234,19 +2234,19 @@

to_tensor(series, tensor_opts \\ [])

Examples -
iex> s = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.to_tensor(s)
-#Nx.Tensor<
-  s64[3]
-  [1, 2, 3]
->
+
iex> s = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.to_tensor(s)
+#Nx.Tensor<
+  s64[3]
+  [1, 2, 3]
+>
 
-iex> s = Explorer.Series.from_list([true, false, true])
-iex> Explorer.Series.to_tensor(s)
-#Nx.Tensor<
-  u8[3]
-  [1, 0, 1]
->
+
iex> s = Explorer.Series.from_list([true, false, true]) +iex> Explorer.Series.to_tensor(s) +#Nx.Tensor< + u8[3] + [1, 0, 1] +>
@@ -2298,28 +2298,28 @@

argmax(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
-iex> Explorer.Series.argmax(s)
+
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
+iex> Explorer.Series.argmax(s)
 3
 
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
-iex> Explorer.Series.argmax(s)
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
+iex> Explorer.Series.argmax(s)
 3
 
-iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
-iex> Explorer.Series.argmax(s)
+iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
+iex> Explorer.Series.argmax(s)
 0
 
-iex> s = Explorer.Series.from_list([~N[2021-01-01 00:00:00], ~N[1999-12-31 00:00:00]])
-iex> Explorer.Series.argmax(s)
+iex> s = Explorer.Series.from_list([~N[2021-01-01 00:00:00], ~N[1999-12-31 00:00:00]])
+iex> Explorer.Series.argmax(s)
 0
 
-iex> s = Explorer.Series.from_list([~T[00:02:03.000212], ~T[00:05:04.000456]])
-iex> Explorer.Series.argmax(s)
+iex> s = Explorer.Series.from_list([~T[00:02:03.000212], ~T[00:05:04.000456]])
+iex> Explorer.Series.argmax(s)
 1
 
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.argmax(s)
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.argmax(s)
 ** (ArgumentError) Explorer.Series.argmax/1 not implemented for dtype :string. Valid dtypes are [:integer, :float, :date, :time, :datetime]
@@ -2360,28 +2360,28 @@

argmin(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
-iex> Explorer.Series.argmin(s)
+
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
+iex> Explorer.Series.argmin(s)
 2
 
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
-iex> Explorer.Series.argmin(s)
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
+iex> Explorer.Series.argmin(s)
 2
 
-iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
-iex> Explorer.Series.argmin(s)
+iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
+iex> Explorer.Series.argmin(s)
 1
 
-iex> s = Explorer.Series.from_list([~N[2021-01-01 00:00:00], ~N[1999-12-31 00:00:00]])
-iex> Explorer.Series.argmin(s)
+iex> s = Explorer.Series.from_list([~N[2021-01-01 00:00:00], ~N[1999-12-31 00:00:00]])
+iex> Explorer.Series.argmin(s)
 1
 
-iex> s = Explorer.Series.from_list([~T[00:02:03.000212], ~T[00:05:04.000456]])
-iex> Explorer.Series.argmin(s)
+iex> s = Explorer.Series.from_list([~T[00:02:03.000212], ~T[00:05:04.000456]])
+iex> Explorer.Series.argmin(s)
 0
 
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.argmin(s)
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.argmin(s)
 ** (ArgumentError) Explorer.Series.argmin/1 not implemented for dtype :string. Valid dtypes are [:integer, :float, :date, :time, :datetime]
@@ -2426,9 +2426,9 @@

correlation(left, right, ddof \\ 1)

Examples -
iex> s1 = Series.from_list([1, 8, 3])
-iex> s2 = Series.from_list([4, 5, 2])
-iex> Series.correlation(s1, s2)
+
iex> s1 = Series.from_list([1, 8, 3])
+iex> s2 = Series.from_list([4, 5, 2])
+iex> Series.correlation(s1, s2)
 0.5447047794019223
@@ -2460,8 +2460,8 @@

count(series)

Examples -
iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.count(s)
+
iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.count(s)
 3
@@ -2502,9 +2502,9 @@

covariance(left, right)

Examples -
iex> s1 = Series.from_list([1, 8, 3])
-iex> s2 = Series.from_list([4, 5, 2])
-iex> Series.covariance(s1, s2)
+
iex> s1 = Series.from_list([1, 8, 3])
+iex> s2 = Series.from_list([4, 5, 2])
+iex> Series.covariance(s1, s2)
 3.0
@@ -2545,14 +2545,14 @@

cut(series, bins, opts \\ [])

Examples -
iex> s = Explorer.Series.from_list([1.0, 2.0, 3.0])
-iex> Explorer.Series.cut(s, [1.5, 2.5])
-#Explorer.DataFrame<
-  Polars[3 x 3]
-  values float [1.0, 2.0, 3.0]
-  break_point float [1.5, 2.5, Inf]
-  category category ["(-inf, 1.5]", "(1.5, 2.5]", "(2.5, inf]"]
->
+
iex> s = Explorer.Series.from_list([1.0, 2.0, 3.0])
+iex> Explorer.Series.cut(s, [1.5, 2.5])
+#Explorer.DataFrame<
+  Polars[3 x 3]
+  values float [1.0, 2.0, 3.0]
+  break_point float [1.5, 2.5, Inf]
+  category category ["(-inf, 1.5]", "(1.5, 2.5]", "(2.5, inf]"]
+>
@@ -2580,13 +2580,13 @@

frequencies(series)

Examples -
iex> s = Explorer.Series.from_list(["a", "a", "b", "c", "c", "c"])
-iex> Explorer.Series.frequencies(s)
-#Explorer.DataFrame<
-  Polars[3 x 2]
-  values string ["c", "a", "b"]
-  counts integer [3, 2, 1]
->
+
iex> s = Explorer.Series.from_list(["a", "a", "b", "c", "c", "c"])
+iex> Explorer.Series.frequencies(s)
+#Explorer.DataFrame<
+  Polars[3 x 2]
+  values string ["c", "a", "b"]
+  counts integer [3, 2, 1]
+>
@@ -2627,28 +2627,28 @@

max(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
-iex> Explorer.Series.max(s)
+
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
+iex> Explorer.Series.max(s)
 3
 
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
-iex> Explorer.Series.max(s)
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
+iex> Explorer.Series.max(s)
 3.0
 
-iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
-iex> Explorer.Series.max(s)
+iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
+iex> Explorer.Series.max(s)
 ~D[2021-01-01]
 
-iex> s = Explorer.Series.from_list([~N[2021-01-01 00:00:00], ~N[1999-12-31 00:00:00]])
-iex> Explorer.Series.max(s)
+iex> s = Explorer.Series.from_list([~N[2021-01-01 00:00:00], ~N[1999-12-31 00:00:00]])
+iex> Explorer.Series.max(s)
 ~N[2021-01-01 00:00:00.000000]
 
-iex> s = Explorer.Series.from_list([~T[00:02:03.000212], ~T[00:05:04.000456]])
-iex> Explorer.Series.max(s)
+iex> s = Explorer.Series.from_list([~T[00:02:03.000212], ~T[00:05:04.000456]])
+iex> Explorer.Series.max(s)
 ~T[00:05:04.000456]
 
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.max(s)
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.max(s)
 ** (ArgumentError) Explorer.Series.max/1 not implemented for dtype :string. Valid dtypes are [:integer, :float, :date, :time, :datetime]
@@ -2689,16 +2689,16 @@

mean(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
-iex> Explorer.Series.mean(s)
+
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
+iex> Explorer.Series.mean(s)
 2.0
 
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
-iex> Explorer.Series.mean(s)
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
+iex> Explorer.Series.mean(s)
 2.0
 
-iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
-iex> Explorer.Series.mean(s)
+iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
+iex> Explorer.Series.mean(s)
 ** (ArgumentError) Explorer.Series.mean/1 not implemented for dtype :date. Valid dtypes are [:integer, :float]
@@ -2739,16 +2739,16 @@

median(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
-iex> Explorer.Series.median(s)
+
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
+iex> Explorer.Series.median(s)
 2.0
 
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
-iex> Explorer.Series.median(s)
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
+iex> Explorer.Series.median(s)
 2.0
 
-iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
-iex> Explorer.Series.median(s)
+iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
+iex> Explorer.Series.median(s)
 ** (ArgumentError) Explorer.Series.median/1 not implemented for dtype :date. Valid dtypes are [:integer, :float]
@@ -2790,28 +2790,28 @@

min(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
-iex> Explorer.Series.min(s)
+
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
+iex> Explorer.Series.min(s)
 1
 
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
-iex> Explorer.Series.min(s)
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
+iex> Explorer.Series.min(s)
 1.0
 
-iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
-iex> Explorer.Series.min(s)
+iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
+iex> Explorer.Series.min(s)
 ~D[1999-12-31]
 
-iex> s = Explorer.Series.from_list([~N[2021-01-01 00:00:00], ~N[1999-12-31 00:00:00]])
-iex> Explorer.Series.min(s)
+iex> s = Explorer.Series.from_list([~N[2021-01-01 00:00:00], ~N[1999-12-31 00:00:00]])
+iex> Explorer.Series.min(s)
 ~N[1999-12-31 00:00:00.000000]
 
-iex> s = Explorer.Series.from_list([~T[00:02:03.000451], ~T[00:05:04.000134]])
-iex> Explorer.Series.min(s)
+iex> s = Explorer.Series.from_list([~T[00:02:03.000451], ~T[00:05:04.000134]])
+iex> Explorer.Series.min(s)
 ~T[00:02:03.000451]
 
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.min(s)
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.min(s)
 ** (ArgumentError) Explorer.Series.min/1 not implemented for dtype :string. Valid dtypes are [:integer, :float, :date, :time, :datetime]
@@ -2840,8 +2840,8 @@

n_distinct(series)

Examples -
iex> s = Explorer.Series.from_list(["a", "b", "a", "b"])
-iex> Explorer.Series.n_distinct(s)
+
iex> s = Explorer.Series.from_list(["a", "b", "a", "b"])
+iex> Explorer.Series.n_distinct(s)
 2
@@ -2870,8 +2870,8 @@

nil_count(series)

Examples -
iex> s = Explorer.Series.from_list(["a", nil, "c", nil, nil])
-iex> Explorer.Series.nil_count(s)
+
iex> s = Explorer.Series.from_list(["a", nil, "c", nil, nil])
+iex> Explorer.Series.nil_count(s)
 3
@@ -2912,12 +2912,12 @@

product(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.product(s)
+
iex> s = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.product(s)
 6
 
-iex> s = Explorer.Series.from_list([true, false, true])
-iex> Explorer.Series.product(s)
+iex> s = Explorer.Series.from_list([true, false, true])
+iex> Explorer.Series.product(s)
 ** (ArgumentError) Explorer.Series.product/1 not implemented for dtype :boolean. Valid dtypes are [:integer, :float]
@@ -2959,14 +2959,14 @@

qcut(series, quantiles, opts \\ [])

Examples -
iex> s = Explorer.Series.from_list([1.0, 2.0, 3.0, 4.0, 5.0])
-iex> Explorer.Series.qcut(s, [0.25, 0.75])
-#Explorer.DataFrame<
-  Polars[5 x 3]
-  values float [1.0, 2.0, 3.0, 4.0, 5.0]
-  break_point float [2.0, 2.0, 4.0, 4.0, Inf]
-  category category ["(-inf, 2]", "(-inf, 2]", "(2, 4]", "(2, 4]", "(4, inf]"]
->
+
iex> s = Explorer.Series.from_list([1.0, 2.0, 3.0, 4.0, 5.0])
+iex> Explorer.Series.qcut(s, [0.25, 0.75])
+#Explorer.DataFrame<
+  Polars[5 x 3]
+  values float [1.0, 2.0, 3.0, 4.0, 5.0]
+  break_point float [2.0, 2.0, 4.0, 4.0, Inf]
+  category category ["(-inf, 2]", "(-inf, 2]", "(2, 4]", "(2, 4]", "(4, inf]"]
+>
@@ -3006,28 +3006,28 @@

quantile(series, quantile)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
-iex> Explorer.Series.quantile(s, 0.2)
+
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
+iex> Explorer.Series.quantile(s, 0.2)
 1
 
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
-iex> Explorer.Series.quantile(s, 0.5)
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
+iex> Explorer.Series.quantile(s, 0.5)
 2.0
 
-iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
-iex> Explorer.Series.quantile(s, 0.5)
+iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
+iex> Explorer.Series.quantile(s, 0.5)
 ~D[2021-01-01]
 
-iex> s = Explorer.Series.from_list([~N[2021-01-01 00:00:00], ~N[1999-12-31 00:00:00]])
-iex> Explorer.Series.quantile(s, 0.5)
+iex> s = Explorer.Series.from_list([~N[2021-01-01 00:00:00], ~N[1999-12-31 00:00:00]])
+iex> Explorer.Series.quantile(s, 0.5)
 ~N[2021-01-01 00:00:00.000000]
 
-iex> s = Explorer.Series.from_list([~T[01:55:00], ~T[15:35:00], ~T[23:00:00]])
-iex> Explorer.Series.quantile(s, 0.5)
+iex> s = Explorer.Series.from_list([~T[01:55:00], ~T[15:35:00], ~T[23:00:00]])
+iex> Explorer.Series.quantile(s, 0.5)
 ~T[15:35:00]
 
-iex> s = Explorer.Series.from_list([true, false, true])
-iex> Explorer.Series.quantile(s, 0.5)
+iex> s = Explorer.Series.from_list([true, false, true])
+iex> Explorer.Series.quantile(s, 0.5)
 ** (ArgumentError) Explorer.Series.quantile/2 not implemented for dtype :boolean. Valid dtypes are [:integer, :float, :date, :time, :datetime]
@@ -3072,24 +3072,24 @@

skew(series, opts \\ [])

Examples -
iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5, 23])
-iex> Explorer.Series.skew(s)
+
iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5, 23])
+iex> Explorer.Series.skew(s)
 1.6727687946848508
 
-iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5, 23])
-iex> Explorer.Series.skew(s, bias: false)
+iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5, 23])
+iex> Explorer.Series.skew(s, bias: false)
 2.2905330058490514
 
-iex> s = Explorer.Series.from_list([1, 2, 3, nil, 1])
-iex> Explorer.Series.skew(s, bias: false)
+iex> s = Explorer.Series.from_list([1, 2, 3, nil, 1])
+iex> Explorer.Series.skew(s, bias: false)
 0.8545630383279712
 
-iex> s = Explorer.Series.from_list([1, 2, 3, nil, 1])
-iex> Explorer.Series.skew(s)
+iex> s = Explorer.Series.from_list([1, 2, 3, nil, 1])
+iex> Explorer.Series.skew(s)
 0.49338220021815865
 
-iex> s = Explorer.Series.from_list([true, false, true])
-iex> Explorer.Series.skew(s, false)
+iex> s = Explorer.Series.from_list([true, false, true])
+iex> Explorer.Series.skew(s, false)
 ** (ArgumentError) Explorer.Series.skew/2 not implemented for dtype :boolean. Valid dtypes are [:integer, :float]
@@ -3130,16 +3130,16 @@

standard_deviation(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
-iex> Explorer.Series.standard_deviation(s)
+
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
+iex> Explorer.Series.standard_deviation(s)
 1.0
 
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
-iex> Explorer.Series.standard_deviation(s)
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
+iex> Explorer.Series.standard_deviation(s)
 1.0
 
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.standard_deviation(s)
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.standard_deviation(s)
 ** (ArgumentError) Explorer.Series.standard_deviation/1 not implemented for dtype :string. Valid dtypes are [:integer, :float]
@@ -3180,20 +3180,20 @@

sum(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
-iex> Explorer.Series.sum(s)
+
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
+iex> Explorer.Series.sum(s)
 6
 
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
-iex> Explorer.Series.sum(s)
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
+iex> Explorer.Series.sum(s)
 6.0
 
-iex> s = Explorer.Series.from_list([true, false, true])
-iex> Explorer.Series.sum(s)
+iex> s = Explorer.Series.from_list([true, false, true])
+iex> Explorer.Series.sum(s)
 2
 
-iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
-iex> Explorer.Series.sum(s)
+iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
+iex> Explorer.Series.sum(s)
 ** (ArgumentError) Explorer.Series.sum/1 not implemented for dtype :date. Valid dtypes are [:integer, :float, :boolean]
@@ -3234,16 +3234,16 @@

variance(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
-iex> Explorer.Series.variance(s)
+
iex> s = Explorer.Series.from_list([1, 2, nil, 3])
+iex> Explorer.Series.variance(s)
 1.0
 
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
-iex> Explorer.Series.variance(s)
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 3.0])
+iex> Explorer.Series.variance(s)
 1.0
 
-iex> s = Explorer.Series.from_list([~N[2021-01-01 00:00:00], ~N[1999-12-31 00:00:00]])
-iex> Explorer.Series.variance(s)
+iex> s = Explorer.Series.from_list([~N[2021-01-01 00:00:00], ~N[1999-12-31 00:00:00]])
+iex> Explorer.Series.variance(s)
 ** (ArgumentError) Explorer.Series.variance/1 not implemented for dtype :datetime. Valid dtypes are [:integer, :float]
@@ -3297,29 +3297,29 @@

abs(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, -1, -3])
-iex> Explorer.Series.abs(s)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 1, 3]
->
-
-iex> s = Explorer.Series.from_list([1.0, 2.0, -1.0, -3.0])
-iex> Explorer.Series.abs(s)
-#Explorer.Series<
-  Polars[4]
-  float [1.0, 2.0, 1.0, 3.0]
->
-
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, -3.0])
-iex> Explorer.Series.abs(s)
-#Explorer.Series<
-  Polars[4]
-  float [1.0, 2.0, nil, 3.0]
->
-
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.abs(s)
+
iex> s = Explorer.Series.from_list([1, 2, -1, -3])
+iex> Explorer.Series.abs(s)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 1, 3]
+>
+
+iex> s = Explorer.Series.from_list([1.0, 2.0, -1.0, -3.0])
+iex> Explorer.Series.abs(s)
+#Explorer.Series<
+  Polars[4]
+  float [1.0, 2.0, 1.0, 3.0]
+>
+
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, -3.0])
+iex> Explorer.Series.abs(s)
+#Explorer.Series<
+  Polars[4]
+  float [1.0, 2.0, nil, 3.0]
+>
+
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.abs(s)
 ** (ArgumentError) Explorer.Series.abs/1 not implemented for dtype :string. Valid dtypes are [:integer, :float]
@@ -3362,25 +3362,25 @@

add(left, right)

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> s2 = Explorer.Series.from_list([4, 5, 6])
-iex> Explorer.Series.add(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  integer [5, 7, 9]
->

You can also use scalar values on both sides:

iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.add(s1, 2)
-#Explorer.Series<
-  Polars[3]
-  integer [3, 4, 5]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> s2 = Explorer.Series.from_list([4, 5, 6])
+iex> Explorer.Series.add(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  integer [5, 7, 9]
+>

You can also use scalar values on both sides:

iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.add(s1, 2)
+#Explorer.Series<
+  Polars[3]
+  integer [3, 4, 5]
+>
 
-iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.add(2, s1)
-#Explorer.Series<
-  Polars[3]
-  integer [3, 4, 5]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 3]) +iex> Explorer.Series.add(2, s1) +#Explorer.Series< + Polars[3] + integer [3, 4, 5] +>
@@ -3408,19 +3408,19 @@

all_equal(left, right)

Examples -
iex> s1 = Explorer.Series.from_list(["a", "b"])
-iex> s2 = Explorer.Series.from_list(["a", "b"])
-iex> Explorer.Series.all_equal(s1, s2)
+
iex> s1 = Explorer.Series.from_list(["a", "b"])
+iex> s2 = Explorer.Series.from_list(["a", "b"])
+iex> Explorer.Series.all_equal(s1, s2)
 true
 
-iex> s1 = Explorer.Series.from_list(["a", "b"])
-iex> s2 = Explorer.Series.from_list(["a", "c"])
-iex> Explorer.Series.all_equal(s1, s2)
+iex> s1 = Explorer.Series.from_list(["a", "b"])
+iex> s2 = Explorer.Series.from_list(["a", "c"])
+iex> Explorer.Series.all_equal(s1, s2)
 false
 
-iex> s1 = Explorer.Series.from_list(["a", "b"])
-iex> s2 = Explorer.Series.from_list([1, 2])
-iex> Explorer.Series.all_equal(s1, s2)
+iex> s1 = Explorer.Series.from_list(["a", "b"])
+iex> s2 = Explorer.Series.from_list([1, 2])
+iex> Explorer.Series.all_equal(s1, s2)
 false
@@ -3450,14 +3450,14 @@

left and right

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> mask1 = Explorer.Series.greater(s1, 1)
-iex> mask2 = Explorer.Series.less(s1, 3)
-iex> Explorer.Series.and(mask1, mask2)
-#Explorer.Series<
-  Polars[3]
-  boolean [false, true, false]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> mask1 = Explorer.Series.greater(s1, 1)
+iex> mask2 = Explorer.Series.less(s1, 3)
+iex> Explorer.Series.and(mask1, mask2)
+#Explorer.Series<
+  Polars[3]
+  boolean [false, true, false]
+>
@@ -3491,62 +3491,62 @@

cast(series, dtype)

Examples -
iex> s = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.cast(s, :string)
-#Explorer.Series<
-  Polars[3]
-  string ["1", "2", "3"]
->
-
-iex> s = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.cast(s, :float)
-#Explorer.Series<
-  Polars[3]
-  float [1.0, 2.0, 3.0]
->
-
-iex> s = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.cast(s, :date)
-#Explorer.Series<
-  Polars[3]
-  date [1970-01-02, 1970-01-03, 1970-01-04]
->

Note that time is represented as an integer of nanoseconds since midnight. +

iex> s = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.cast(s, :string)
+#Explorer.Series<
+  Polars[3]
+  string ["1", "2", "3"]
+>
+
+iex> s = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.cast(s, :float)
+#Explorer.Series<
+  Polars[3]
+  float [1.0, 2.0, 3.0]
+>
+
+iex> s = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.cast(s, :date)
+#Explorer.Series<
+  Polars[3]
+  date [1970-01-02, 1970-01-03, 1970-01-04]
+>

Note that time is represented as an integer of nanoseconds since midnight. In Elixir we can't represent nanoseconds, only microseconds. So be aware that -information can be lost if a conversion is needed (e.g. calling to_list/1).

iex> s = Explorer.Series.from_list([1_000, 2_000, 3_000])
-iex> Explorer.Series.cast(s, :time)
-#Explorer.Series<
-  Polars[3]
-  time [00:00:00.000001, 00:00:00.000002, 00:00:00.000003]
->
-
-iex> s = Explorer.Series.from_list([86399 * 1_000 * 1_000 * 1_000])
-iex> Explorer.Series.cast(s, :time)
-#Explorer.Series<
-  Polars[1]
-  time [23:59:59.000000]
->

Note that datetime is represented as an integer of microseconds since Unix Epoch (1970-01-01 00:00:00).

iex> s = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.cast(s, :datetime)
-#Explorer.Series<
-  Polars[3]
-  datetime [1970-01-01 00:00:00.000001, 1970-01-01 00:00:00.000002, 1970-01-01 00:00:00.000003]
->
-
-iex> s = Explorer.Series.from_list([1649883642 * 1_000 * 1_000])
-iex> Explorer.Series.cast(s, :datetime)
-#Explorer.Series<
-  Polars[1]
-  datetime [2022-04-13 21:00:42.000000]
->

You can also use cast/2 to categorise a string:

iex> s = Explorer.Series.from_list(["apple", "banana",  "apple", "lemon"])
-iex> Explorer.Series.cast(s, :category)
-#Explorer.Series<
-  Polars[4]
-  category ["apple", "banana", "apple", "lemon"]
->

cast/2 will return the series as a no-op if you try to cast to the same dtype.

iex> s = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.cast(s, :integer)
-#Explorer.Series<
-  Polars[3]
-  integer [1, 2, 3]
->
+information can be lost if a conversion is needed (e.g. calling to_list/1).

iex> s = Explorer.Series.from_list([1_000, 2_000, 3_000])
+iex> Explorer.Series.cast(s, :time)
+#Explorer.Series<
+  Polars[3]
+  time [00:00:00.000001, 00:00:00.000002, 00:00:00.000003]
+>
+
+iex> s = Explorer.Series.from_list([86399 * 1_000 * 1_000 * 1_000])
+iex> Explorer.Series.cast(s, :time)
+#Explorer.Series<
+  Polars[1]
+  time [23:59:59.000000]
+>

Note that datetime is represented as an integer of microseconds since Unix Epoch (1970-01-01 00:00:00).

iex> s = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.cast(s, :datetime)
+#Explorer.Series<
+  Polars[3]
+  datetime [1970-01-01 00:00:00.000001, 1970-01-01 00:00:00.000002, 1970-01-01 00:00:00.000003]
+>
+
+iex> s = Explorer.Series.from_list([1649883642 * 1_000 * 1_000])
+iex> Explorer.Series.cast(s, :datetime)
+#Explorer.Series<
+  Polars[1]
+  datetime [2022-04-13 21:00:42.000000]
+>

You can also use cast/2 to categorise a string:

iex> s = Explorer.Series.from_list(["apple", "banana",  "apple", "lemon"])
+iex> Explorer.Series.cast(s, :category)
+#Explorer.Series<
+  Polars[4]
+  category ["apple", "banana", "apple", "lemon"]
+>

cast/2 will return the series as a no-op if you try to cast to the same dtype.

iex> s = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.cast(s, :integer)
+#Explorer.Series<
+  Polars[3]
+  integer [1, 2, 3]
+>
@@ -3580,32 +3580,32 @@

categorise(series, categories)

If a categorical series is given as second argument, we will extract its -categories and map the integers into it:

iex> categories = Explorer.Series.from_list(["a", "b", "c", nil, "a"], dtype: :category)
-iex> indexes = Explorer.Series.from_list([0, 2, 1, 0, 2])
-iex> Explorer.Series.categorise(indexes, categories)
-#Explorer.Series<
-  Polars[5]
-  category ["a", "c", "b", "a", "c"]
->

Otherwise, if a list of strings or a series of strings is given, they are -considered to be the categories series itself:

iex> categories = Explorer.Series.from_list(["a", "b", "c"])
-iex> indexes = Explorer.Series.from_list([0, 2, 1, 0, 2])
-iex> Explorer.Series.categorise(indexes, categories)
-#Explorer.Series<
-  Polars[5]
-  category ["a", "c", "b", "a", "c"]
->
-
-iex> indexes = Explorer.Series.from_list([0, 2, 1, 0, 2])
-iex> Explorer.Series.categorise(indexes, ["a", "b", "c"])
-#Explorer.Series<
-  Polars[5]
-  category ["a", "c", "b", "a", "c"]
->

Elements that are not mapped to a category will become nil:

iex> indexes = Explorer.Series.from_list([0, 2, nil, 0, 2, 7])
-iex> Explorer.Series.categorise(indexes, ["a", "b", "c"])
-#Explorer.Series<
-  Polars[6]
-  category ["a", "c", nil, "a", "c", nil]
->
+categories and map the integers into it:

iex> categories = Explorer.Series.from_list(["a", "b", "c", nil, "a"], dtype: :category)
+iex> indexes = Explorer.Series.from_list([0, 2, 1, 0, 2])
+iex> Explorer.Series.categorise(indexes, categories)
+#Explorer.Series<
+  Polars[5]
+  category ["a", "c", "b", "a", "c"]
+>

Otherwise, if a list of strings or a series of strings is given, they are +considered to be the categories series itself:

iex> categories = Explorer.Series.from_list(["a", "b", "c"])
+iex> indexes = Explorer.Series.from_list([0, 2, 1, 0, 2])
+iex> Explorer.Series.categorise(indexes, categories)
+#Explorer.Series<
+  Polars[5]
+  category ["a", "c", "b", "a", "c"]
+>
+
+iex> indexes = Explorer.Series.from_list([0, 2, 1, 0, 2])
+iex> Explorer.Series.categorise(indexes, ["a", "b", "c"])
+#Explorer.Series<
+  Polars[5]
+  category ["a", "c", "b", "a", "c"]
+>

Elements that are not mapped to a category will become nil:

iex> indexes = Explorer.Series.from_list([0, 2, nil, 0, 2, 7])
+iex> Explorer.Series.categorise(indexes, ["a", "b", "c"])
+#Explorer.Series<
+  Polars[6]
+  category ["a", "c", nil, "a", "c", nil]
+>
@@ -3646,19 +3646,19 @@

clip(series, min, max)

Examples -
iex> s = Explorer.Series.from_list([-50, 5, nil, 50])
-iex> Explorer.Series.clip(s, 1, 10)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 5, nil, 10]
->
+
iex> s = Explorer.Series.from_list([-50, 5, nil, 50])
+iex> Explorer.Series.clip(s, 1, 10)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 5, nil, 10]
+>
 
-iex> s = Explorer.Series.from_list([-50, 5, nil, 50])
-iex> Explorer.Series.clip(s, 1.5, 10.5)
-#Explorer.Series<
-  Polars[4]
-  float [1.5, 5.0, nil, 10.5]
->
+
iex> s = Explorer.Series.from_list([-50, 5, nil, 50]) +iex> Explorer.Series.clip(s, 1.5, 10.5) +#Explorer.Series< + Polars[4] + float [1.5, 5.0, nil, 10.5] +>
@@ -3692,14 +3692,14 @@

coalesce(list)

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, nil, nil])
-iex> s2 = Explorer.Series.from_list([1, 2, nil, 4])
-iex> s3 = Explorer.Series.from_list([nil, nil, 3, 4])
-iex> Explorer.Series.coalesce([s1, s2, s3])
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 3, 4]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, nil, nil])
+iex> s2 = Explorer.Series.from_list([1, 2, nil, 4])
+iex> s3 = Explorer.Series.from_list([nil, nil, 3, 4])
+iex> Explorer.Series.coalesce([s1, s2, s3])
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 3, 4]
+>
@@ -3733,17 +3733,17 @@

coalesce(s1, s2)

Examples -
iex> s1 = Explorer.Series.from_list([1, nil, 3, nil])
-iex> s2 = Explorer.Series.from_list([1, 2, nil, 4])
-iex> Explorer.Series.coalesce(s1, s2)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 3, 4]
->
+
iex> s1 = Explorer.Series.from_list([1, nil, 3, nil])
+iex> s2 = Explorer.Series.from_list([1, 2, nil, 4])
+iex> Explorer.Series.coalesce(s1, s2)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 3, 4]
+>
 
-iex> s1 = Explorer.Series.from_list(["foo", nil, "bar", nil])
-iex> s2 = Explorer.Series.from_list([1, 2, nil, 4])
-iex> Explorer.Series.coalesce(s1, s2)
+iex> s1 = Explorer.Series.from_list(["foo", nil, "bar", nil])
+iex> s2 = Explorer.Series.from_list([1, 2, nil, 4])
+iex> Explorer.Series.coalesce(s1, s2)
 ** (ArgumentError) cannot invoke Explorer.Series.coalesce/2 with mismatched dtypes: :string and :integer
@@ -3786,35 +3786,35 @@

divide(left, right)

Examples -
iex> s1 = [10, 10, 10] |> Explorer.Series.from_list()
-iex> s2 = [2, 2, 2] |> Explorer.Series.from_list()
-iex> Explorer.Series.divide(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  float [5.0, 5.0, 5.0]
->
-
-iex> s1 = [10, 10, 10] |> Explorer.Series.from_list()
-iex> Explorer.Series.divide(s1, 2)
-#Explorer.Series<
-  Polars[3]
-  float [5.0, 5.0, 5.0]
->
-
-iex> s1 = [10, 52 ,10] |> Explorer.Series.from_list()
-iex> Explorer.Series.divide(s1, 2.5)
-#Explorer.Series<
-  Polars[3]
-  float [4.0, 20.8, 4.0]
->
-
-iex> s1 = [10, 10, 10] |> Explorer.Series.from_list()
-iex> s2 = [2, 0, 2] |> Explorer.Series.from_list()
-iex> Explorer.Series.divide(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  float [5.0, Inf, 5.0]
->
+
iex> s1 = [10, 10, 10] |> Explorer.Series.from_list()
+iex> s2 = [2, 2, 2] |> Explorer.Series.from_list()
+iex> Explorer.Series.divide(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  float [5.0, 5.0, 5.0]
+>
+
+iex> s1 = [10, 10, 10] |> Explorer.Series.from_list()
+iex> Explorer.Series.divide(s1, 2)
+#Explorer.Series<
+  Polars[3]
+  float [5.0, 5.0, 5.0]
+>
+
+iex> s1 = [10, 52 ,10] |> Explorer.Series.from_list()
+iex> Explorer.Series.divide(s1, 2.5)
+#Explorer.Series<
+  Polars[3]
+  float [4.0, 20.8, 4.0]
+>
+
+iex> s1 = [10, 10, 10] |> Explorer.Series.from_list()
+iex> s2 = [2, 0, 2] |> Explorer.Series.from_list()
+iex> Explorer.Series.divide(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  float [5.0, Inf, 5.0]
+>
@@ -3855,51 +3855,51 @@

equal(left, right)

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> s2 = Explorer.Series.from_list([1, 2, 4])
-iex> Explorer.Series.equal(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  boolean [true, true, false]
->
-
-iex> s = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.equal(s, 1)
-#Explorer.Series<
-  Polars[3]
-  boolean [true, false, false]
->
-
-iex> s = Explorer.Series.from_list([true, true, false])
-iex> Explorer.Series.equal(s, true)
-#Explorer.Series<
-  Polars[3]
-  boolean [true, true, false]
->
-
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.equal(s, "a")
-#Explorer.Series<
-  Polars[3]
-  boolean [true, false, false]
->
-
-iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
-iex> Explorer.Series.equal(s, ~D[1999-12-31])
-#Explorer.Series<
-  Polars[2]
-  boolean [false, true]
->
-
-iex> s = Explorer.Series.from_list([~N[2022-01-01 00:00:00], ~N[2022-01-01 23:00:00]])
-iex> Explorer.Series.equal(s, ~N[2022-01-01 00:00:00])
-#Explorer.Series<
-  Polars[2]
-  boolean [true, false]
->
-
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.equal(s, false)
+
iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> s2 = Explorer.Series.from_list([1, 2, 4])
+iex> Explorer.Series.equal(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  boolean [true, true, false]
+>
+
+iex> s = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.equal(s, 1)
+#Explorer.Series<
+  Polars[3]
+  boolean [true, false, false]
+>
+
+iex> s = Explorer.Series.from_list([true, true, false])
+iex> Explorer.Series.equal(s, true)
+#Explorer.Series<
+  Polars[3]
+  boolean [true, true, false]
+>
+
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.equal(s, "a")
+#Explorer.Series<
+  Polars[3]
+  boolean [true, false, false]
+>
+
+iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
+iex> Explorer.Series.equal(s, ~D[1999-12-31])
+#Explorer.Series<
+  Polars[2]
+  boolean [false, true]
+>
+
+iex> s = Explorer.Series.from_list([~N[2022-01-01 00:00:00], ~N[2022-01-01 23:00:00]])
+iex> Explorer.Series.equal(s, ~N[2022-01-01 00:00:00])
+#Explorer.Series<
+  Polars[2]
+  boolean [true, false]
+>
+
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.equal(s, false)
 ** (ArgumentError) cannot invoke Explorer.Series.equal/2 with mismatched dtypes: :string and false
@@ -3973,13 +3973,13 @@

greater(left, right)

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> s2 = Explorer.Series.from_list([1, 2, 4])
-iex> Explorer.Series.greater(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  boolean [false, false, false]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> s2 = Explorer.Series.from_list([1, 2, 4])
+iex> Explorer.Series.greater(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  boolean [false, false, false]
+>
@@ -4024,13 +4024,13 @@

greater_equal(left, right)

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> s2 = Explorer.Series.from_list([1, 2, 4])
-iex> Explorer.Series.greater_equal(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  boolean [true, true, false]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> s2 = Explorer.Series.from_list([1, 2, 4])
+iex> Explorer.Series.greater_equal(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  boolean [true, true, false]
+>
@@ -4058,21 +4058,21 @@

left in right

Examples -
iex> left = Explorer.Series.from_list([1, 2, 3])
-iex> right = Explorer.Series.from_list([1, 2])
-iex> Series.in(left, right)
-#Explorer.Series<
-  Polars[3]
-  boolean [true, true, false]
->
+
iex> left = Explorer.Series.from_list([1, 2, 3])
+iex> right = Explorer.Series.from_list([1, 2])
+iex> Series.in(left, right)
+#Explorer.Series<
+  Polars[3]
+  boolean [true, true, false]
+>
 
-iex> left = Explorer.Series.from_list([~D[1970-01-01], ~D[2000-01-01], ~D[2010-04-17]])
-iex> right = Explorer.Series.from_list([~D[1970-01-01], ~D[2010-04-17]])
-iex> Series.in(left, right)
-#Explorer.Series<
-  Polars[3]
-  boolean [true, false, true]
->
+
iex> left = Explorer.Series.from_list([~D[1970-01-01], ~D[2000-01-01], ~D[2010-04-17]]) +iex> right = Explorer.Series.from_list([~D[1970-01-01], ~D[2010-04-17]]) +iex> Series.in(left, right) +#Explorer.Series< + Polars[3] + boolean [true, false, true] +>
@@ -4106,12 +4106,12 @@

is_nil(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 4])
-iex> Explorer.Series.is_nil(s)
-#Explorer.Series<
-  Polars[4]
-  boolean [false, false, true, false]
->
+
iex> s = Explorer.Series.from_list([1, 2, nil, 4])
+iex> Explorer.Series.is_nil(s)
+#Explorer.Series<
+  Polars[4]
+  boolean [false, false, true, false]
+>
@@ -4145,12 +4145,12 @@

is_not_nil(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 4])
-iex> Explorer.Series.is_not_nil(s)
-#Explorer.Series<
-  Polars[4]
-  boolean [true, true, false, true]
->
+
iex> s = Explorer.Series.from_list([1, 2, nil, 4])
+iex> Explorer.Series.is_not_nil(s)
+#Explorer.Series<
+  Polars[4]
+  boolean [true, true, false, true]
+>
@@ -4195,13 +4195,13 @@

less(left, right)

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> s2 = Explorer.Series.from_list([1, 2, 4])
-iex> Explorer.Series.less(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  boolean [false, false, true]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> s2 = Explorer.Series.from_list([1, 2, 4])
+iex> Explorer.Series.less(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  boolean [false, false, true]
+>
@@ -4246,13 +4246,13 @@

less_equal(left, right)

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> s2 = Explorer.Series.from_list([1, 2, 4])
-iex> Explorer.Series.less_equal(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  boolean [true, true, true]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> s2 = Explorer.Series.from_list([1, 2, 4])
+iex> Explorer.Series.less_equal(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  boolean [true, true, true]
+>
@@ -4293,12 +4293,12 @@

log(s)

Examples -
iex> s = Explorer.Series.from_list([1, 2, 3, nil, 4])
-iex> Explorer.Series.log(s)
-#Explorer.Series<
-  Polars[5]
-  float [0.0, 0.6931471805599453, 1.0986122886681098, nil, 1.3862943611198906]
->
+
iex> s = Explorer.Series.from_list([1, 2, 3, nil, 4])
+iex> Explorer.Series.log(s)
+#Explorer.Series<
+  Polars[5]
+  float [0.0, 0.6931471805599453, 1.0986122886681098, nil, 1.3862943611198906]
+>
@@ -4338,12 +4338,12 @@

log(argument, base)

Examples -
iex> s = Explorer.Series.from_list([8, 16, 32])
-iex> Explorer.Series.log(s, 2)
-#Explorer.Series<
-  Polars[3]
-  float [3.0, 4.0, 5.0]
->
+
iex> s = Explorer.Series.from_list([8, 16, 32])
+iex> Explorer.Series.log(s, 2)
+#Explorer.Series<
+  Polars[3]
+  float [3.0, 4.0, 5.0]
+>
@@ -4377,13 +4377,13 @@

mask(series, mask)

Examples -
iex> s1 = Explorer.Series.from_list([1,2,3])
-iex> s2 = Explorer.Series.from_list([true, false, true])
-iex> Explorer.Series.mask(s1, s2)
-#Explorer.Series<
-  Polars[2]
-  integer [1, 3]
->
+
iex> s1 = Explorer.Series.from_list([1,2,3])
+iex> s2 = Explorer.Series.from_list([true, false, true])
+iex> Explorer.Series.mask(s1, s2)
+#Explorer.Series<
+  Polars[2]
+  integer [1, 3]
+>
@@ -4425,20 +4425,20 @@

multiply(left, right)

Examples -
iex> s1 = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> s2 = 11..20 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.multiply(s1, s2)
-#Explorer.Series<
-  Polars[10]
-  integer [11, 24, 39, 56, 75, 96, 119, 144, 171, 200]
->
+
iex> s1 = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> s2 = 11..20 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.multiply(s1, s2)
+#Explorer.Series<
+  Polars[10]
+  integer [11, 24, 39, 56, 75, 96, 119, 144, 171, 200]
+>
 
-iex> s1 = 1..5 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.multiply(s1, 2)
-#Explorer.Series<
-  Polars[5]
-  integer [2, 4, 6, 8, 10]
->
+
iex> s1 = 1..5 |> Enum.to_list() |> Explorer.Series.from_list() +iex> Explorer.Series.multiply(s1, 2) +#Explorer.Series< + Polars[5] + integer [2, 4, 6, 8, 10] +>
@@ -4466,12 +4466,12 @@

not series

Examples -
iex> s1 = Explorer.Series.from_list([true, false, false])
-iex> Explorer.Series.not(s1)
-#Explorer.Series<
-  Polars[3]
-  boolean [false, true, true]
->
+
iex> s1 = Explorer.Series.from_list([true, false, false])
+iex> Explorer.Series.not(s1)
+#Explorer.Series<
+  Polars[3]
+  boolean [false, true, true]
+>
@@ -4512,51 +4512,51 @@

not_equal(left, right)

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> s2 = Explorer.Series.from_list([1, 2, 4])
-iex> Explorer.Series.not_equal(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  boolean [false, false, true]
->
-
-iex> s = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.not_equal(s, 1)
-#Explorer.Series<
-  Polars[3]
-  boolean [false, true, true]
->
-
-iex> s = Explorer.Series.from_list([true, true, false])
-iex> Explorer.Series.not_equal(s, true)
-#Explorer.Series<
-  Polars[3]
-  boolean [false, false, true]
->
-
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.not_equal(s, "a")
-#Explorer.Series<
-  Polars[3]
-  boolean [false, true, true]
->
-
-iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
-iex> Explorer.Series.not_equal(s, ~D[1999-12-31])
-#Explorer.Series<
-  Polars[2]
-  boolean [true, false]
->
-
-iex> s = Explorer.Series.from_list([~N[2022-01-01 00:00:00], ~N[2022-01-01 23:00:00]])
-iex> Explorer.Series.not_equal(s, ~N[2022-01-01 00:00:00])
-#Explorer.Series<
-  Polars[2]
-  boolean [false, true]
->
-
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.not_equal(s, false)
+
iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> s2 = Explorer.Series.from_list([1, 2, 4])
+iex> Explorer.Series.not_equal(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  boolean [false, false, true]
+>
+
+iex> s = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.not_equal(s, 1)
+#Explorer.Series<
+  Polars[3]
+  boolean [false, true, true]
+>
+
+iex> s = Explorer.Series.from_list([true, true, false])
+iex> Explorer.Series.not_equal(s, true)
+#Explorer.Series<
+  Polars[3]
+  boolean [false, false, true]
+>
+
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.not_equal(s, "a")
+#Explorer.Series<
+  Polars[3]
+  boolean [false, true, true]
+>
+
+iex> s = Explorer.Series.from_list([~D[2021-01-01], ~D[1999-12-31]])
+iex> Explorer.Series.not_equal(s, ~D[1999-12-31])
+#Explorer.Series<
+  Polars[2]
+  boolean [true, false]
+>
+
+iex> s = Explorer.Series.from_list([~N[2022-01-01 00:00:00], ~N[2022-01-01 23:00:00]])
+iex> Explorer.Series.not_equal(s, ~N[2022-01-01 00:00:00])
+#Explorer.Series<
+  Polars[2]
+  boolean [false, true]
+>
+
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.not_equal(s, false)
 ** (ArgumentError) cannot invoke Explorer.Series.not_equal/2 with mismatched dtypes: :string and false
@@ -4586,14 +4586,14 @@

left or right

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> mask1 = Explorer.Series.less(s1, 2)
-iex> mask2 = Explorer.Series.greater(s1, 2)
-iex> Explorer.Series.or(mask1, mask2)
-#Explorer.Series<
-  Polars[3]
-  boolean [true, false, true]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> mask1 = Explorer.Series.less(s1, 2)
+iex> mask2 = Explorer.Series.greater(s1, 2)
+iex> Explorer.Series.or(mask1, mask2)
+#Explorer.Series<
+  Polars[3]
+  boolean [true, false, true]
+>
@@ -4635,19 +4635,19 @@

peaks(series, max_or_min \\ :max)

Examples -
iex> s = Explorer.Series.from_list([1, 2, 4, 1, 4])
-iex> Explorer.Series.peaks(s)
-#Explorer.Series<
-  Polars[5]
-  boolean [false, false, true, false, true]
->
+
iex> s = Explorer.Series.from_list([1, 2, 4, 1, 4])
+iex> Explorer.Series.peaks(s)
+#Explorer.Series<
+  Polars[5]
+  boolean [false, false, true, false, true]
+>
 
-iex> s = [~T[03:00:02.000000], ~T[13:24:56.000000], ~T[02:04:19.000000]] |> Explorer.Series.from_list()
-iex> Explorer.Series.peaks(s)
-#Explorer.Series<
-  Polars[3]
-  boolean [false, true, false]
->
+
iex> s = [~T[03:00:02.000000], ~T[13:24:56.000000], ~T[02:04:19.000000]] |> Explorer.Series.from_list() +iex> Explorer.Series.peaks(s) +#Explorer.Series< + Polars[3] + boolean [false, true, false] +>
@@ -4689,40 +4689,40 @@

pow(left, right)

Examples -
iex> s = [8, 16, 32] |> Explorer.Series.from_list()
-iex> Explorer.Series.pow(s, 2.0)
-#Explorer.Series<
-  Polars[3]
-  float [64.0, 256.0, 1024.0]
->
-
-iex> s = [2, 4, 6] |> Explorer.Series.from_list()
-iex> Explorer.Series.pow(s, 3)
-#Explorer.Series<
-  Polars[3]
-  integer [8, 64, 216]
->
-
-iex> s = [2, 4, 6] |> Explorer.Series.from_list()
-iex> Explorer.Series.pow(s, -3.0)
-#Explorer.Series<
-  Polars[3]
-  float [0.125, 0.015625, 0.004629629629629629]
->
-
-iex> s = [1.0, 2.0, 3.0] |> Explorer.Series.from_list()
-iex> Explorer.Series.pow(s, 3.0)
-#Explorer.Series<
-  Polars[3]
-  float [1.0, 8.0, 27.0]
->
-
-iex> s = [2.0, 4.0, 6.0] |> Explorer.Series.from_list()
-iex> Explorer.Series.pow(s, 2)
-#Explorer.Series<
-  Polars[3]
-  float [4.0, 16.0, 36.0]
->
+
iex> s = [8, 16, 32] |> Explorer.Series.from_list()
+iex> Explorer.Series.pow(s, 2.0)
+#Explorer.Series<
+  Polars[3]
+  float [64.0, 256.0, 1024.0]
+>
+
+iex> s = [2, 4, 6] |> Explorer.Series.from_list()
+iex> Explorer.Series.pow(s, 3)
+#Explorer.Series<
+  Polars[3]
+  integer [8, 64, 216]
+>
+
+iex> s = [2, 4, 6] |> Explorer.Series.from_list()
+iex> Explorer.Series.pow(s, -3.0)
+#Explorer.Series<
+  Polars[3]
+  float [0.125, 0.015625, 0.004629629629629629]
+>
+
+iex> s = [1.0, 2.0, 3.0] |> Explorer.Series.from_list()
+iex> Explorer.Series.pow(s, 3.0)
+#Explorer.Series<
+  Polars[3]
+  float [1.0, 8.0, 27.0]
+>
+
+iex> s = [2.0, 4.0, 6.0] |> Explorer.Series.from_list()
+iex> Explorer.Series.pow(s, 2)
+#Explorer.Series<
+  Polars[3]
+  float [4.0, 16.0, 36.0]
+>
@@ -4764,28 +4764,28 @@

quotient(left, right)

Examples -
iex> s1 = [10, 11, 10] |> Explorer.Series.from_list()
-iex> s2 = [2, 2, 2] |> Explorer.Series.from_list()
-iex> Explorer.Series.quotient(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  integer [5, 5, 5]
->
+
iex> s1 = [10, 11, 10] |> Explorer.Series.from_list()
+iex> s2 = [2, 2, 2] |> Explorer.Series.from_list()
+iex> Explorer.Series.quotient(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  integer [5, 5, 5]
+>
 
-iex> s1 = [10, 11, 10] |> Explorer.Series.from_list()
-iex> s2 = [2, 2, 0] |> Explorer.Series.from_list()
-iex> Explorer.Series.quotient(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  integer [5, 5, nil]
->
+iex> s1 = [10, 11, 10] |> Explorer.Series.from_list()
+iex> s2 = [2, 2, 0] |> Explorer.Series.from_list()
+iex> Explorer.Series.quotient(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  integer [5, 5, nil]
+>
 
-iex> s1 = [10, 12, 15] |> Explorer.Series.from_list()
-iex> Explorer.Series.quotient(s1, 3)
-#Explorer.Series<
-  Polars[3]
-  integer [3, 4, 5]
->
+
iex> s1 = [10, 12, 15] |> Explorer.Series.from_list() +iex> Explorer.Series.quotient(s1, 3) +#Explorer.Series< + Polars[3] + integer [3, 4, 5] +>
@@ -4827,48 +4827,48 @@

rank(series, opts \\ [])

Examples -
iex> s = Explorer.Series.from_list([3, 6, 1, 1, 6])
-iex> Explorer.Series.rank(s)
-#Explorer.Series<
-  Polars[5]
-  float [3.0, 4.5, 1.5, 1.5, 4.5]
->
-
-iex> s = Explorer.Series.from_list([1.1, 2.4, 3.2])
-iex> Explorer.Series.rank(s, method: "ordinal")
-#Explorer.Series<
-  Polars[3]
-  integer [1, 2, 3]
->
-
-iex> s = Explorer.Series.from_list([ ~N[2022-07-07 17:44:13.020548], ~N[2022-07-07 17:43:08.473561], ~N[2022-07-07 17:45:00.116337] ])
-iex> Explorer.Series.rank(s, method: "average")
-#Explorer.Series<
-  Polars[3]
-  float [2.0, 1.0, 3.0]
->
-
-iex> s = Explorer.Series.from_list([3, 6, 1, 1, 6])
-iex> Explorer.Series.rank(s, method: "min")
-#Explorer.Series<
-  Polars[5]
-  integer [3, 4, 1, 1, 4]
->
-
-iex> s = Explorer.Series.from_list([3, 6, 1, 1, 6])
-iex> Explorer.Series.rank(s, method: "dense")
-#Explorer.Series<
-  Polars[5]
-  integer [2, 3, 1, 1, 3]
->
-
-
-iex> s = Explorer.Series.from_list([3, 6, 1, 1, 6])
-iex> Explorer.Series.rank(s, method: "random", seed: 42)
-#Explorer.Series<
-  Polars[5]
-  integer [3, 4, 2, 1, 5]
->
+
iex> s = Explorer.Series.from_list([3, 6, 1, 1, 6])
+iex> Explorer.Series.rank(s)
+#Explorer.Series<
+  Polars[5]
+  float [3.0, 4.5, 1.5, 1.5, 4.5]
+>
+
+iex> s = Explorer.Series.from_list([1.1, 2.4, 3.2])
+iex> Explorer.Series.rank(s, method: "ordinal")
+#Explorer.Series<
+  Polars[3]
+  integer [1, 2, 3]
+>
+
+iex> s = Explorer.Series.from_list([ ~N[2022-07-07 17:44:13.020548], ~N[2022-07-07 17:43:08.473561], ~N[2022-07-07 17:45:00.116337] ])
+iex> Explorer.Series.rank(s, method: "average")
+#Explorer.Series<
+  Polars[3]
+  float [2.0, 1.0, 3.0]
+>
+
+iex> s = Explorer.Series.from_list([3, 6, 1, 1, 6])
+iex> Explorer.Series.rank(s, method: "min")
+#Explorer.Series<
+  Polars[5]
+  integer [3, 4, 1, 1, 4]
+>
+
+iex> s = Explorer.Series.from_list([3, 6, 1, 1, 6])
+iex> Explorer.Series.rank(s, method: "dense")
+#Explorer.Series<
+  Polars[5]
+  integer [2, 3, 1, 1, 3]
+>
+
+
+iex> s = Explorer.Series.from_list([3, 6, 1, 1, 6])
+iex> Explorer.Series.rank(s, method: "random", seed: 42)
+#Explorer.Series<
+  Polars[5]
+  integer [3, 4, 2, 1, 5]
+>
@@ -4910,28 +4910,28 @@

remainder(left, right)

Examples -
iex> s1 = [10, 11, 10] |> Explorer.Series.from_list()
-iex> s2 = [2, 2, 2] |> Explorer.Series.from_list()
-iex> Explorer.Series.remainder(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  integer [0, 1, 0]
->
+
iex> s1 = [10, 11, 10] |> Explorer.Series.from_list()
+iex> s2 = [2, 2, 2] |> Explorer.Series.from_list()
+iex> Explorer.Series.remainder(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  integer [0, 1, 0]
+>
 
-iex> s1 = [10, 11, 10] |> Explorer.Series.from_list()
-iex> s2 = [2, 2, 0] |> Explorer.Series.from_list()
-iex> Explorer.Series.remainder(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  integer [0, 1, nil]
->
+iex> s1 = [10, 11, 10] |> Explorer.Series.from_list()
+iex> s2 = [2, 2, 0] |> Explorer.Series.from_list()
+iex> Explorer.Series.remainder(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  integer [0, 1, nil]
+>
 
-iex> s1 = [10, 11, 9] |> Explorer.Series.from_list()
-iex> Explorer.Series.remainder(s1, 3)
-#Explorer.Series<
-  Polars[3]
-  integer [1, 2, 0]
->
+
iex> s1 = [10, 11, 9] |> Explorer.Series.from_list() +iex> Explorer.Series.remainder(s1, 3) +#Explorer.Series< + Polars[3] + integer [1, 2, 0] +>
@@ -5001,12 +5001,12 @@

strftime(series, format_string)

Examples -
iex> s = Explorer.Series.from_list([~N[2023-01-05 12:34:56], nil])
-iex> Explorer.Series.strftime(s, "%Y/%m/%d %H:%M:%S")
-#Explorer.Series<
-  Polars[2]
-  string ["2023/01/05 12:34:56", nil]
->
+
iex> s = Explorer.Series.from_list([~N[2023-01-05 12:34:56], nil])
+iex> Explorer.Series.strftime(s, "%Y/%m/%d %H:%M:%S")
+#Explorer.Series<
+  Polars[2]
+  string ["2023/01/05 12:34:56", nil]
+>
@@ -5041,12 +5041,12 @@

strptime(series, format_string)

Examples -
iex> s = Explorer.Series.from_list(["2023-01-05 12:34:56", "XYZ", nil])
-iex> Explorer.Series.strptime(s, "%Y-%m-%d %H:%M:%S")
-#Explorer.Series<
-  Polars[3]
-  datetime [2023-01-05 12:34:56.000000, nil, nil]
->
+
iex> s = Explorer.Series.from_list(["2023-01-05 12:34:56", "XYZ", nil])
+iex> Explorer.Series.strptime(s, "%Y-%m-%d %H:%M:%S")
+#Explorer.Series<
+  Polars[3]
+  datetime [2023-01-05 12:34:56.000000, nil, nil]
+>
@@ -5088,25 +5088,25 @@

subtract(left, right)

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> s2 = Explorer.Series.from_list([4, 5, 6])
-iex> Explorer.Series.subtract(s1, s2)
-#Explorer.Series<
-  Polars[3]
-  integer [-3, -3, -3]
->

You can also use scalar values on both sides:

iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.subtract(s1, 2)
-#Explorer.Series<
-  Polars[3]
-  integer [-1, 0, 1]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> s2 = Explorer.Series.from_list([4, 5, 6])
+iex> Explorer.Series.subtract(s1, s2)
+#Explorer.Series<
+  Polars[3]
+  integer [-3, -3, -3]
+>

You can also use scalar values on both sides:

iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.subtract(s1, 2)
+#Explorer.Series<
+  Polars[3]
+  integer [-1, 0, 1]
+>
 
-iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.subtract(2, s1)
-#Explorer.Series<
-  Polars[3]
-  integer [1, 0, -1]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 3]) +iex> Explorer.Series.subtract(2, s1) +#Explorer.Series< + Polars[3] + integer [1, 0, -1] +>
@@ -5138,19 +5138,19 @@

transform(series, fun)

Examples -
iex> s = Explorer.Series.from_list(["this ", " is", "great   "])
-iex> Explorer.Series.transform(s, &String.trim/1)
-#Explorer.Series<
-  Polars[3]
-  string ["this", "is", "great"]
->
+
iex> s = Explorer.Series.from_list(["this ", " is", "great   "])
+iex> Explorer.Series.transform(s, &String.trim/1)
+#Explorer.Series<
+  Polars[3]
+  string ["this", "is", "great"]
+>
 
-iex> s = Explorer.Series.from_list(["this", "is", "great"])
-iex> Explorer.Series.transform(s, &String.length/1)
-#Explorer.Series<
-  Polars[3]
-  integer [4, 2, 5]
->
+
iex> s = Explorer.Series.from_list(["this", "is", "great"]) +iex> Explorer.Series.transform(s, &String.length/1) +#Explorer.Series< + Polars[3] + integer [4, 2, 5] +>
@@ -5196,17 +5196,17 @@

day_of_week(series)

Examples -
iex> s = Explorer.Series.from_list([~D[2023-01-15], ~D[2023-01-16], ~D[2023-01-20], nil])
-iex> Explorer.Series.day_of_week(s)
-#Explorer.Series<
-  Polars[4]
-  integer [7, 1, 5, nil]
->

It can also be called on a datetime series.

iex> s = Explorer.Series.from_list([~N[2023-01-15 00:00:00], ~N[2023-01-16 23:59:59.999999], ~N[2023-01-20 12:00:00], nil])
-iex> Explorer.Series.day_of_week(s)
-#Explorer.Series<
-  Polars[4]
-  integer [7, 1, 5, nil]
->
+
iex> s = Explorer.Series.from_list([~D[2023-01-15], ~D[2023-01-16], ~D[2023-01-20], nil])
+iex> Explorer.Series.day_of_week(s)
+#Explorer.Series<
+  Polars[4]
+  integer [7, 1, 5, nil]
+>

It can also be called on a datetime series.

iex> s = Explorer.Series.from_list([~N[2023-01-15 00:00:00], ~N[2023-01-16 23:59:59.999999], ~N[2023-01-20 12:00:00], nil])
+iex> Explorer.Series.day_of_week(s)
+#Explorer.Series<
+  Polars[4]
+  integer [7, 1, 5, nil]
+>
@@ -5240,12 +5240,12 @@

hour(series)

Examples -
iex> s = Explorer.Series.from_list([~N[2023-01-15 00:00:00], ~N[2022-02-16 23:59:59.999999], ~N[2021-03-20 12:00:00], nil])
-iex> Explorer.Series.hour(s)
-#Explorer.Series<
-  Polars[4]
-  integer [0, 23, 12, nil]
->
+
iex> s = Explorer.Series.from_list([~N[2023-01-15 00:00:00], ~N[2022-02-16 23:59:59.999999], ~N[2021-03-20 12:00:00], nil])
+iex> Explorer.Series.hour(s)
+#Explorer.Series<
+  Polars[4]
+  integer [0, 23, 12, nil]
+>
@@ -5279,12 +5279,12 @@

minute(series)

Examples -
iex> s = Explorer.Series.from_list([~N[2023-01-15 00:00:00], ~N[2022-02-16 23:59:59.999999], ~N[2021-03-20 12:00:00], nil])
-iex> Explorer.Series.minute(s)
-#Explorer.Series<
-  Polars[4]
-  integer [0, 59, 0, nil]
->
+
iex> s = Explorer.Series.from_list([~N[2023-01-15 00:00:00], ~N[2022-02-16 23:59:59.999999], ~N[2021-03-20 12:00:00], nil])
+iex> Explorer.Series.minute(s)
+#Explorer.Series<
+  Polars[4]
+  integer [0, 59, 0, nil]
+>
@@ -5318,17 +5318,17 @@

month(series)

Examples -
iex> s = Explorer.Series.from_list([~D[2023-01-15], ~D[2023-02-16], ~D[2023-03-20], nil])
-iex> Explorer.Series.month(s)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 3, nil]
->

It can also be called on a datetime series.

iex> s = Explorer.Series.from_list([~N[2023-01-15 00:00:00], ~N[2023-02-16 23:59:59.999999], ~N[2023-03-20 12:00:00], nil])
-iex> Explorer.Series.month(s)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 3, nil]
->
+
iex> s = Explorer.Series.from_list([~D[2023-01-15], ~D[2023-02-16], ~D[2023-03-20], nil])
+iex> Explorer.Series.month(s)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 3, nil]
+>

It can also be called on a datetime series.

iex> s = Explorer.Series.from_list([~N[2023-01-15 00:00:00], ~N[2023-02-16 23:59:59.999999], ~N[2023-03-20 12:00:00], nil])
+iex> Explorer.Series.month(s)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 3, nil]
+>
@@ -5362,12 +5362,12 @@

second(series)

Examples -
iex> s = Explorer.Series.from_list([~N[2023-01-15 00:00:00], ~N[2022-02-16 23:59:59.999999], ~N[2021-03-20 12:00:00], nil])
-iex> Explorer.Series.second(s)
-#Explorer.Series<
-  Polars[4]
-  integer [0, 59, 0, nil]
->
+
iex> s = Explorer.Series.from_list([~N[2023-01-15 00:00:00], ~N[2022-02-16 23:59:59.999999], ~N[2021-03-20 12:00:00], nil])
+iex> Explorer.Series.second(s)
+#Explorer.Series<
+  Polars[4]
+  integer [0, 59, 0, nil]
+>
@@ -5401,17 +5401,17 @@

year(series)

Examples -
iex> s = Explorer.Series.from_list([~D[2023-01-15], ~D[2022-02-16], ~D[2021-03-20], nil])
-iex> Explorer.Series.year(s)
-#Explorer.Series<
-  Polars[4]
-  integer [2023, 2022, 2021, nil]
->

It can also be called on a datetime series.

iex> s = Explorer.Series.from_list([~N[2023-01-15 00:00:00], ~N[2022-02-16 23:59:59.999999], ~N[2021-03-20 12:00:00], nil])
-iex> Explorer.Series.year(s)
-#Explorer.Series<
-  Polars[4]
-  integer [2023, 2022, 2021, nil]
->
+
iex> s = Explorer.Series.from_list([~D[2023-01-15], ~D[2022-02-16], ~D[2021-03-20], nil])
+iex> Explorer.Series.year(s)
+#Explorer.Series<
+  Polars[4]
+  integer [2023, 2022, 2021, nil]
+>

It can also be called on a datetime series.

iex> s = Explorer.Series.from_list([~N[2023-01-15 00:00:00], ~N[2022-02-16 23:59:59.999999], ~N[2021-03-20 12:00:00], nil])
+iex> Explorer.Series.year(s)
+#Explorer.Series<
+  Polars[4]
+  integer [2023, 2022, 2021, nil]
+>
@@ -5464,12 +5464,12 @@

acos(series)

Examples -
iex> s = [1.0, 0.0, -1.0, -0.7071067811865475, 0.7071067811865475] |> Explorer.Series.from_list()
-iex> Explorer.Series.acos(s)
-#Explorer.Series<
-  Polars[5]
-  float [0.0, 1.5707963267948966, 3.141592653589793, 2.356194490192345, 0.7853981633974484]
->
+
iex> s = [1.0, 0.0, -1.0, -0.7071067811865475, 0.7071067811865475] |> Explorer.Series.from_list()
+iex> Explorer.Series.acos(s)
+#Explorer.Series<
+  Polars[5]
+  float [0.0, 1.5707963267948966, 3.141592653589793, 2.356194490192345, 0.7853981633974484]
+>
@@ -5510,12 +5510,12 @@

asin(series)

Examples -
iex> s = [1.0, 0.0, -1.0, -0.7071067811865475, 0.7071067811865475] |> Explorer.Series.from_list()
-iex> Explorer.Series.asin(s)
-#Explorer.Series<
-  Polars[5]
-  float [1.5707963267948966, 0.0, -1.5707963267948966, -0.7853981633974482, 0.7853981633974482]
->
+
iex> s = [1.0, 0.0, -1.0, -0.7071067811865475, 0.7071067811865475] |> Explorer.Series.from_list()
+iex> Explorer.Series.asin(s)
+#Explorer.Series<
+  Polars[5]
+  float [1.5707963267948966, 0.0, -1.5707963267948966, -0.7853981633974482, 0.7853981633974482]
+>
@@ -5556,12 +5556,12 @@

atan(series)

Examples -
iex> s = [1.0, 0.0, -1.0, -0.7071067811865475, 0.7071067811865475] |> Explorer.Series.from_list()
-iex> Explorer.Series.atan(s)
-#Explorer.Series<
-  Polars[5]
-  float [0.7853981633974483, 0.0, -0.7853981633974483, -0.6154797086703873, 0.6154797086703873]
->
+
iex> s = [1.0, 0.0, -1.0, -0.7071067811865475, 0.7071067811865475] |> Explorer.Series.from_list()
+iex> Explorer.Series.atan(s)
+#Explorer.Series<
+  Polars[5]
+  float [0.7853981633974483, 0.0, -0.7853981633974483, -0.6154797086703873, 0.6154797086703873]
+>
@@ -5595,12 +5595,12 @@

ceil(series)

Examples -
iex> s = Explorer.Series.from_list([1.124993, 2.555321, 3.995001])
-iex> Explorer.Series.ceil(s)
-#Explorer.Series<
-  Polars[3]
-  float [2.0, 3.0, 4.0]
->
+
iex> s = Explorer.Series.from_list([1.124993, 2.555321, 3.995001])
+iex> Explorer.Series.ceil(s)
+#Explorer.Series<
+  Polars[3]
+  float [2.0, 3.0, 4.0]
+>
@@ -5641,13 +5641,13 @@

cos(series)

Examples -
iex> pi = :math.pi()
-iex> s = [-pi * 3/2, -pi, -pi / 2, -pi / 4, 0, pi / 4, pi / 2, pi, pi * 3/2] |> Explorer.Series.from_list()
-iex> Explorer.Series.cos(s)
-#Explorer.Series<
-  Polars[9]
-  float [-1.8369701987210297e-16, -1.0, 6.123233995736766e-17, 0.7071067811865476, 1.0, 0.7071067811865476, 6.123233995736766e-17, -1.0, -1.8369701987210297e-16]
->
+
iex> pi = :math.pi()
+iex> s = [-pi * 3/2, -pi, -pi / 2, -pi / 4, 0, pi / 4, pi / 2, pi, pi * 3/2] |> Explorer.Series.from_list()
+iex> Explorer.Series.cos(s)
+#Explorer.Series<
+  Polars[9]
+  float [-1.8369701987210297e-16, -1.0, 6.123233995736766e-17, 0.7071067811865476, 1.0, 0.7071067811865476, 6.123233995736766e-17, -1.0, -1.8369701987210297e-16]
+>
@@ -5681,12 +5681,12 @@

floor(series)

Examples -
iex> s = Explorer.Series.from_list([1.124993, 2.555321, 3.995001])
-iex> Explorer.Series.floor(s)
-#Explorer.Series<
-  Polars[3]
-  float [1.0, 2.0, 3.0]
->
+
iex> s = Explorer.Series.from_list([1.124993, 2.555321, 3.995001])
+iex> Explorer.Series.floor(s)
+#Explorer.Series<
+  Polars[3]
+  float [1.0, 2.0, 3.0]
+>
@@ -5720,14 +5720,14 @@

is_finite(series)

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 0, nil])
-iex> s2 = Explorer.Series.from_list([0, 2, 0, nil])
-iex> s3 = Explorer.Series.divide(s1, s2)
-iex> Explorer.Series.is_finite(s3)
-#Explorer.Series<
-  Polars[4]
-  boolean [false, true, false, nil]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 0, nil])
+iex> s2 = Explorer.Series.from_list([0, 2, 0, nil])
+iex> s3 = Explorer.Series.divide(s1, s2)
+iex> Explorer.Series.is_finite(s3)
+#Explorer.Series<
+  Polars[4]
+  boolean [false, true, false, nil]
+>
@@ -5761,14 +5761,14 @@

is_infinite(series)

Examples -
iex> s1 = Explorer.Series.from_list([1, -1, 2, 0, nil])
-iex> s2 = Explorer.Series.from_list([0, 0, 2, 0, nil])
-iex> s3 = Explorer.Series.divide(s1, s2)
-iex> Explorer.Series.is_infinite(s3)
-#Explorer.Series<
-  Polars[5]
-  boolean [true, true, false, false, nil]
->
+
iex> s1 = Explorer.Series.from_list([1, -1, 2, 0, nil])
+iex> s2 = Explorer.Series.from_list([0, 0, 2, 0, nil])
+iex> s3 = Explorer.Series.divide(s1, s2)
+iex> Explorer.Series.is_infinite(s3)
+#Explorer.Series<
+  Polars[5]
+  boolean [true, true, false, false, nil]
+>
@@ -5802,14 +5802,14 @@

is_nan(series)

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 0, nil])
-iex> s2 = Explorer.Series.from_list([0, 2, 0, nil])
-iex> s3 = Explorer.Series.divide(s1, s2)
-iex> Explorer.Series.is_nan(s3)
-#Explorer.Series<
-  Polars[4]
-  boolean [false, false, true, nil]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 0, nil])
+iex> s2 = Explorer.Series.from_list([0, 2, 0, nil])
+iex> s3 = Explorer.Series.divide(s1, s2)
+iex> Explorer.Series.is_nan(s3)
+#Explorer.Series<
+  Polars[4]
+  boolean [false, false, true, nil]
+>
@@ -5843,12 +5843,12 @@

round(series, decimals)

Examples -
iex> s = Explorer.Series.from_list([1.124993, 2.555321, 3.995001])
-iex> Explorer.Series.round(s, 2)
-#Explorer.Series<
-  Polars[3]
-  float [1.12, 2.56, 4.0]
->
+
iex> s = Explorer.Series.from_list([1.124993, 2.555321, 3.995001])
+iex> Explorer.Series.round(s, 2)
+#Explorer.Series<
+  Polars[3]
+  float [1.12, 2.56, 4.0]
+>
@@ -5889,13 +5889,13 @@

sin(series)

Examples -
iex> pi = :math.pi()
-iex> s = [-pi * 3/2, -pi, -pi / 2, -pi / 4, 0, pi / 4, pi / 2, pi, pi * 3/2] |> Explorer.Series.from_list()
-iex> Explorer.Series.sin(s)
-#Explorer.Series<
-  Polars[9]
-  float [1.0, -1.2246467991473532e-16, -1.0, -0.7071067811865475, 0.0, 0.7071067811865475, 1.0, 1.2246467991473532e-16, -1.0]
->
+
iex> pi = :math.pi()
+iex> s = [-pi * 3/2, -pi, -pi / 2, -pi / 4, 0, pi / 4, pi / 2, pi, pi * 3/2] |> Explorer.Series.from_list()
+iex> Explorer.Series.sin(s)
+#Explorer.Series<
+  Polars[9]
+  float [1.0, -1.2246467991473532e-16, -1.0, -0.7071067811865475, 0.0, 0.7071067811865475, 1.0, 1.2246467991473532e-16, -1.0]
+>
@@ -5936,13 +5936,13 @@

tan(series)

Examples -
iex> pi = :math.pi()
-iex> s = [-pi * 3/2, -pi, -pi / 2, -pi / 4, 0, pi / 4, pi / 2, pi, pi * 3/2] |> Explorer.Series.from_list()
-iex> Explorer.Series.tan(s)
-#Explorer.Series<
-  Polars[9]
-  float [-5443746451065123.0, 1.2246467991473532e-16, -1.633123935319537e16, -0.9999999999999999, 0.0, 0.9999999999999999, 1.633123935319537e16, -1.2246467991473532e-16, 5443746451065123.0]
->
+
iex> pi = :math.pi()
+iex> s = [-pi * 3/2, -pi, -pi / 2, -pi / 4, 0, pi / 4, pi / 2, pi, pi * 3/2] |> Explorer.Series.from_list()
+iex> Explorer.Series.tan(s)
+#Explorer.Series<
+  Polars[9]
+  float [-5443746451065123.0, 1.2246467991473532e-16, -1.633123935319537e16, -0.9999999999999999, 0.0, 0.9999999999999999, 1.633123935319537e16, -1.2246467991473532e-16, 5443746451065123.0]
+>
@@ -5988,12 +5988,12 @@

contains(series, pattern)

Examples -
iex> s = Explorer.Series.from_list(["abc", "def", "bcd"])
-iex> Explorer.Series.contains(s, "bc")
-#Explorer.Series<
-  Polars[3]
-  boolean [true, false, true]
->
+
iex> s = Explorer.Series.from_list(["abc", "def", "bcd"])
+iex> Explorer.Series.contains(s, "bc")
+#Explorer.Series<
+  Polars[3]
+  boolean [true, false, true]
+>
@@ -6027,12 +6027,12 @@

downcase(series)

Examples -
iex> s = Explorer.Series.from_list(["ABC", "DEF", "BCD"])
-iex> Explorer.Series.downcase(s)
-#Explorer.Series<
-  Polars[3]
-  string ["abc", "def", "bcd"]
->
+
iex> s = Explorer.Series.from_list(["ABC", "DEF", "BCD"])
+iex> Explorer.Series.downcase(s)
+#Explorer.Series<
+  Polars[3]
+  string ["abc", "def", "bcd"]
+>
@@ -6066,12 +6066,12 @@

trim(series)

Examples -
iex> s = Explorer.Series.from_list(["  abc", "def  ", "  bcd"])
-iex> Explorer.Series.trim(s)
-#Explorer.Series<
-  Polars[3]
-  string ["abc", "def", "bcd"]
->
+
iex> s = Explorer.Series.from_list(["  abc", "def  ", "  bcd"])
+iex> Explorer.Series.trim(s)
+#Explorer.Series<
+  Polars[3]
+  string ["abc", "def", "bcd"]
+>
@@ -6105,12 +6105,12 @@

trim_leading(series)

Examples -
iex> s = Explorer.Series.from_list(["  abc", "def  ", "  bcd"])
-iex> Explorer.Series.trim_leading(s)
-#Explorer.Series<
-  Polars[3]
-  string ["abc", "def  ", "bcd"]
->
+
iex> s = Explorer.Series.from_list(["  abc", "def  ", "  bcd"])
+iex> Explorer.Series.trim_leading(s)
+#Explorer.Series<
+  Polars[3]
+  string ["abc", "def  ", "bcd"]
+>
@@ -6144,12 +6144,12 @@

trim_trailing(series)

Examples -
iex> s = Explorer.Series.from_list(["  abc", "def  ", "  bcd"])
-iex> Explorer.Series.trim_trailing(s)
-#Explorer.Series<
-  Polars[3]
-  string ["  abc", "def", "  bcd"]
->
+
iex> s = Explorer.Series.from_list(["  abc", "def  ", "  bcd"])
+iex> Explorer.Series.trim_trailing(s)
+#Explorer.Series<
+  Polars[3]
+  string ["  abc", "def", "  bcd"]
+>
@@ -6183,12 +6183,12 @@

upcase(series)

Examples -
iex> s = Explorer.Series.from_list(["abc", "def", "bcd"])
-iex> Explorer.Series.upcase(s)
-#Explorer.Series<
-  Polars[3]
-  string ["ABC", "DEF", "BCD"]
->
+
iex> s = Explorer.Series.from_list(["abc", "def", "bcd"])
+iex> Explorer.Series.upcase(s)
+#Explorer.Series<
+  Polars[3]
+  string ["ABC", "DEF", "BCD"]
+>
@@ -6235,19 +6235,19 @@

categories(series)

Examples -
iex> s = Explorer.Series.from_list(["a", "b", "c", nil, "a", "c"], dtype: :category)
-iex> Explorer.Series.categories(s)
-#Explorer.Series<
-  Polars[3]
-  string ["a", "b", "c"]
->
+
iex> s = Explorer.Series.from_list(["a", "b", "c", nil, "a", "c"], dtype: :category)
+iex> Explorer.Series.categories(s)
+#Explorer.Series<
+  Polars[3]
+  string ["a", "b", "c"]
+>
 
-iex> s = Explorer.Series.from_list(["c", "a", "b"], dtype: :category)
-iex> Explorer.Series.categories(s)
-#Explorer.Series<
-  Polars[3]
-  string ["c", "a", "b"]
->
+
iex> s = Explorer.Series.from_list(["c", "a", "b"], dtype: :category) +iex> Explorer.Series.categories(s) +#Explorer.Series< + Polars[3] + string ["c", "a", "b"] +>
@@ -6281,12 +6281,12 @@

dtype(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, 3])
-iex> Explorer.Series.dtype(s)
+
iex> s = Explorer.Series.from_list([1, 2, 3])
+iex> Explorer.Series.dtype(s)
 :integer
 
-iex> s = Explorer.Series.from_list(["a", nil, "b", "c"])
-iex> Explorer.Series.dtype(s)
+iex> s = Explorer.Series.from_list(["a", nil, "b", "c"])
+iex> Explorer.Series.dtype(s)
 :string
@@ -6322,31 +6322,31 @@

iotype(series)

Examples -
iex> s = Explorer.Series.from_list([1, 2, 3, 4])
-iex> Explorer.Series.iotype(s)
-{:s, 64}
+
iex> s = Explorer.Series.from_list([1, 2, 3, 4])
+iex> Explorer.Series.iotype(s)
+{:s, 64}
 
-iex> s = Explorer.Series.from_list([~D[1999-12-31], ~D[1989-01-01]])
-iex> Explorer.Series.iotype(s)
-{:s, 32}
+iex> s = Explorer.Series.from_list([~D[1999-12-31], ~D[1989-01-01]])
+iex> Explorer.Series.iotype(s)
+{:s, 32}
 
-iex> s = Explorer.Series.from_list([~T[00:00:00.000000], ~T[23:59:59.999999]])
-iex> Explorer.Series.iotype(s)
-{:s, 64}
+iex> s = Explorer.Series.from_list([~T[00:00:00.000000], ~T[23:59:59.999999]])
+iex> Explorer.Series.iotype(s)
+{:s, 64}
 
-iex> s = Explorer.Series.from_list([1.2, 2.3, 3.5, 4.5])
-iex> Explorer.Series.iotype(s)
-{:f, 64}
+iex> s = Explorer.Series.from_list([1.2, 2.3, 3.5, 4.5])
+iex> Explorer.Series.iotype(s)
+{:f, 64}
 
-iex> s = Explorer.Series.from_list([true, false, true])
-iex> Explorer.Series.iotype(s)
-{:u, 8}

The operation returns :none for strings and binaries, as they do not -provide a fixed-width binary representation:

iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.iotype(s)
+iex> s = Explorer.Series.from_list([true, false, true])
+iex> Explorer.Series.iotype(s)
+{:u, 8}

The operation returns :none for strings and binaries, as they do not +provide a fixed-width binary representation:

iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.iotype(s)
 :none

However, if appropriate, you can convert them to categorical types, -which will then return the index of each category:

iex> s = Explorer.Series.from_list(["a", "b", "c"], dtype: :category)
-iex> Explorer.Series.iotype(s)
-{:u, 32}
+which will then return the index of each category:

iex> s = Explorer.Series.from_list(["a", "b", "c"], dtype: :category)
+iex> Explorer.Series.iotype(s)
+{:u, 32}
@@ -6380,8 +6380,8 @@

size(series)

Examples -
iex> s = Explorer.Series.from_list([~D[1999-12-31], ~D[1989-01-01]])
-iex> Explorer.Series.size(s)
+
iex> s = Explorer.Series.from_list([~D[1999-12-31], ~D[1989-01-01]])
+iex> Explorer.Series.size(s)
 2
@@ -6432,19 +6432,19 @@

argsort(series, opts \\ [])

Examples -
iex> s = Explorer.Series.from_list([9, 3, 7, 1])
-iex> Explorer.Series.argsort(s)
-#Explorer.Series<
-  Polars[4]
-  integer [3, 1, 2, 0]
->
+
iex> s = Explorer.Series.from_list([9, 3, 7, 1])
+iex> Explorer.Series.argsort(s)
+#Explorer.Series<
+  Polars[4]
+  integer [3, 1, 2, 0]
+>
 
-iex> s = Explorer.Series.from_list([9, 3, 7, 1])
-iex> Explorer.Series.argsort(s, direction: :desc)
-#Explorer.Series<
-  Polars[4]
-  integer [0, 2, 1, 3]
->
+
iex> s = Explorer.Series.from_list([9, 3, 7, 1]) +iex> Explorer.Series.argsort(s, direction: :desc) +#Explorer.Series< + Polars[4] + integer [0, 2, 1, 3] +>
@@ -6479,12 +6479,12 @@

at(series, idx)

Examples -
iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.at(s, 2)
+
iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.at(s, 2)
 "c"
 
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.at(s, 4)
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.at(s, 4)
 ** (ArgumentError) index 4 out of bounds for series of size 3
@@ -6519,17 +6519,17 @@

at_every(series, every_n)

Examples -
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.at_every(s, 2)
-#Explorer.Series<
-  Polars[5]
-  integer [1, 3, 5, 7, 9]
->

If n is bigger than the size of the series, the result is a new series with only the first value of the supplied series.

iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.at_every(s, 20)
-#Explorer.Series<
-  Polars[1]
-  integer [1]
->
+
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.at_every(s, 2)
+#Explorer.Series<
+  Polars[5]
+  integer [1, 3, 5, 7, 9]
+>

If n is bigger than the size of the series, the result is a new series with only the first value of the supplied series.

iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.at_every(s, 20)
+#Explorer.Series<
+  Polars[1]
+  integer [1]
+>
@@ -6563,21 +6563,21 @@

concat(series)

Examples -
iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> s2 = Explorer.Series.from_list([4, 5, 6])
-iex> Explorer.Series.concat([s1, s2])
-#Explorer.Series<
-  Polars[6]
-  integer [1, 2, 3, 4, 5, 6]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 3])
+iex> s2 = Explorer.Series.from_list([4, 5, 6])
+iex> Explorer.Series.concat([s1, s2])
+#Explorer.Series<
+  Polars[6]
+  integer [1, 2, 3, 4, 5, 6]
+>
 
-iex> s1 = Explorer.Series.from_list([1, 2, 3])
-iex> s2 = Explorer.Series.from_list([4.0, 5.0, 6.4])
-iex> Explorer.Series.concat([s1, s2])
-#Explorer.Series<
-  Polars[6]
-  float [1.0, 2.0, 3.0, 4.0, 5.0, 6.4]
->
+
iex> s1 = Explorer.Series.from_list([1, 2, 3]) +iex> s2 = Explorer.Series.from_list([4.0, 5.0, 6.4]) +iex> Explorer.Series.concat([s1, s2]) +#Explorer.Series< + Polars[6] + float [1.0, 2.0, 3.0, 4.0, 5.0, 6.4] +>
@@ -6633,12 +6633,12 @@

distinct(series)

Examples -
iex> s = [1, 1, 2, 2, 3, 3] |> Explorer.Series.from_list()
-iex> Explorer.Series.distinct(s)
-#Explorer.Series<
-  Polars[3]
-  integer [1, 2, 3]
->
+
iex> s = [1, 1, 2, 2, 3, 3] |> Explorer.Series.from_list()
+iex> Explorer.Series.distinct(s)
+#Explorer.Series<
+  Polars[3]
+  integer [1, 2, 3]
+>
@@ -6672,8 +6672,8 @@

first(series)

Examples -
iex> s = 1..100 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.first(s)
+
iex> s = 1..100 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.first(s)
 1
@@ -6708,27 +6708,27 @@

format(list)

Examples -
iex> s1 = Explorer.Series.from_list(["a", "b", "c"])
-iex> s2 = Explorer.Series.from_list(["d", "e", "f"])
-iex> s3 = Explorer.Series.from_list(["g", "h", "i"])
-iex> Explorer.Series.format([s1, s2, s3])
-#Explorer.Series<
-  Polars[3]
-  string ["adg", "beh", "cfi"]
->
-
-iex> s1 = Explorer.Series.from_list(["a", "b", "c", "d"])
-iex> s2 = Explorer.Series.from_list([1, 2, 3, 4])
-iex> s3 = Explorer.Series.from_list([1.5, :nan, :infinity, :neg_infinity])
-iex> Explorer.Series.format([s1, "/", s2, "/", s3])
-#Explorer.Series<
-  Polars[4]
-  string ["a/1/1.5", "b/2/NaN", "c/3/inf", "d/4/-inf"]
->
-
-iex> s1 = Explorer.Series.from_list([<<1>>, <<239, 191, 19>>], dtype: :binary)
-iex> s2 = Explorer.Series.from_list([<<3>>, <<4>>], dtype: :binary)
-iex> Explorer.Series.format([s1, s2])
+
iex> s1 = Explorer.Series.from_list(["a", "b", "c"])
+iex> s2 = Explorer.Series.from_list(["d", "e", "f"])
+iex> s3 = Explorer.Series.from_list(["g", "h", "i"])
+iex> Explorer.Series.format([s1, s2, s3])
+#Explorer.Series<
+  Polars[3]
+  string ["adg", "beh", "cfi"]
+>
+
+iex> s1 = Explorer.Series.from_list(["a", "b", "c", "d"])
+iex> s2 = Explorer.Series.from_list([1, 2, 3, 4])
+iex> s3 = Explorer.Series.from_list([1.5, :nan, :infinity, :neg_infinity])
+iex> Explorer.Series.format([s1, "/", s2, "/", s3])
+#Explorer.Series<
+  Polars[4]
+  string ["a/1/1.5", "b/2/NaN", "c/3/inf", "d/4/-inf"]
+>
+
+iex> s1 = Explorer.Series.from_list([<<1>>, <<239, 191, 19>>], dtype: :binary)
+iex> s2 = Explorer.Series.from_list([<<3>>, <<4>>], dtype: :binary)
+iex> Explorer.Series.format([s1, s2])
 ** (RuntimeError) Polars Error: External error: invalid utf-8 sequence
@@ -6765,12 +6765,12 @@

head(series, n_elements \\ 10)

Examples -
iex> s = 1..100 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.head(s)
-#Explorer.Series<
-  Polars[10]
-  integer [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
->
+
iex> s = 1..100 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.head(s)
+#Explorer.Series<
+  Polars[10]
+  integer [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+>
@@ -6804,8 +6804,8 @@

last(series)

Examples -
iex> s = 1..100 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.last(s)
+
iex> s = 1..100 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.last(s)
 100
@@ -6834,12 +6834,12 @@

reverse(series)

Example -
iex> s = [1, 2, 3] |> Explorer.Series.from_list()
-iex> Explorer.Series.reverse(s)
-#Explorer.Series<
-  Polars[3]
-  integer [3, 2, 1]
->
+
iex> s = [1, 2, 3] |> Explorer.Series.from_list()
+iex> Explorer.Series.reverse(s)
+#Explorer.Series<
+  Polars[3]
+  integer [3, 2, 1]
+>
@@ -6884,47 +6884,47 @@

sample(series, n_or_frac, opts \\ [])

Examples -
iex> s = 1..100 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.sample(s, 10, seed: 100)
-#Explorer.Series<
-  Polars[10]
-  integer [55, 51, 33, 26, 5, 32, 62, 31, 9, 25]
->
-
-iex> s = 1..100 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.sample(s, 0.05, seed: 100)
-#Explorer.Series<
-  Polars[5]
-  integer [49, 77, 96, 19, 18]
->
-
-iex> s = 1..5 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.sample(s, 7, seed: 100, replace: true)
-#Explorer.Series<
-  Polars[7]
-  integer [4, 1, 3, 4, 3, 4, 2]
->
-
-iex> s = 1..5 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.sample(s, 1.2, seed: 100, replace: true)
-#Explorer.Series<
-  Polars[6]
-  integer [4, 1, 3, 4, 3, 4]
->
-
-iex> s = 0..9 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.sample(s, 1.0, seed: 100, shuffle: false)
-#Explorer.Series<
-  Polars[10]
-  integer [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
->
-
-iex> s = 0..9 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.sample(s, 1.0, seed: 100, shuffle: true)
-#Explorer.Series<
-  Polars[10]
-  integer [7, 9, 2, 0, 4, 1, 3, 8, 5, 6]
->
+
iex> s = 1..100 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.sample(s, 10, seed: 100)
+#Explorer.Series<
+  Polars[10]
+  integer [55, 51, 33, 26, 5, 32, 62, 31, 9, 25]
+>
+
+iex> s = 1..100 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.sample(s, 0.05, seed: 100)
+#Explorer.Series<
+  Polars[5]
+  integer [49, 77, 96, 19, 18]
+>
+
+iex> s = 1..5 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.sample(s, 7, seed: 100, replace: true)
+#Explorer.Series<
+  Polars[7]
+  integer [4, 1, 3, 4, 3, 4, 2]
+>
+
+iex> s = 1..5 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.sample(s, 1.2, seed: 100, replace: true)
+#Explorer.Series<
+  Polars[6]
+  integer [4, 1, 3, 4, 3, 4]
+>
+
+iex> s = 0..9 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.sample(s, 1.0, seed: 100, shuffle: false)
+#Explorer.Series<
+  Polars[10]
+  integer [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+>
+
+iex> s = 0..9 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.sample(s, 1.0, seed: 100, shuffle: true)
+#Explorer.Series<
+  Polars[10]
+  integer [7, 9, 2, 0, 4, 1, 3, 8, 5, 6]
+>
@@ -6958,19 +6958,19 @@

shift(series, offset)

Examples -
iex> s = 1..5 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.shift(s, 2)
-#Explorer.Series<
-  Polars[5]
-  integer [nil, nil, 1, 2, 3]
->
+
iex> s = 1..5 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.shift(s, 2)
+#Explorer.Series<
+  Polars[5]
+  integer [nil, nil, 1, 2, 3]
+>
 
-iex> s = 1..5 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.shift(s, -2)
-#Explorer.Series<
-  Polars[5]
-  integer [3, 4, 5, nil, nil]
->
+
iex> s = 1..5 |> Enum.to_list() |> Explorer.Series.from_list() +iex> Explorer.Series.shift(s, -2) +#Explorer.Series< + Polars[5] + integer [3, 4, 5, nil, nil] +>
@@ -7013,12 +7013,12 @@

shuffle(series, opts \\ [])

Examples -
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.shuffle(s, seed: 100)
-#Explorer.Series<
-  Polars[10]
-  integer [8, 10, 3, 1, 5, 2, 4, 9, 6, 7]
->
+
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.shuffle(s, seed: 100)
+#Explorer.Series<
+  Polars[10]
+  integer [8, 10, 3, 1, 5, 2, 4, 9, 6, 7]
+>
@@ -7055,33 +7055,33 @@

slice(series, indices)

Examples -
iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.slice(s, [0, 2])
-#Explorer.Series<
-  Polars[2]
-  string ["a", "c"]
->
+
iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.slice(s, [0, 2])
+#Explorer.Series<
+  Polars[2]
+  string ["a", "c"]
+>
 
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.slice(s, 1..2)
-#Explorer.Series<
-  Polars[2]
-  string ["b", "c"]
->
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.slice(s, 1..2)
+#Explorer.Series<
+  Polars[2]
+  string ["b", "c"]
+>
 
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.slice(s, -2..-1)
-#Explorer.Series<
-  Polars[2]
-  string ["b", "c"]
->
+iex> s = Explorer.Series.from_list(["a", "b", "c"])
+iex> Explorer.Series.slice(s, -2..-1)
+#Explorer.Series<
+  Polars[2]
+  string ["b", "c"]
+>
 
-iex> s = Explorer.Series.from_list(["a", "b", "c"])
-iex> Explorer.Series.slice(s, 3..2//1)
-#Explorer.Series<
-  Polars[0]
-  string []
->
+
iex> s = Explorer.Series.from_list(["a", "b", "c"]) +iex> Explorer.Series.slice(s, 3..2//1) +#Explorer.Series< + Polars[0] + string [] +>
@@ -7115,29 +7115,29 @@

slice(series, offset, size)

Examples -
iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5])
-iex> Explorer.Series.slice(s, 1, 2)
-#Explorer.Series<
-  Polars[2]
-  integer [2, 3]
->

Negative offsets count from the end of the series:

iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5])
-iex> Explorer.Series.slice(s, -3, 2)
-#Explorer.Series<
-  Polars[2]
-  integer [3, 4]
->

If the offset runs past the end of the series, -the series is empty:

iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5])
-iex> Explorer.Series.slice(s, 10, 3)
-#Explorer.Series<
-  Polars[0]
-  integer []
->

If the size runs past the end of the series, -the result may be shorter than the size:

iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5])
-iex> Explorer.Series.slice(s, -3, 4)
-#Explorer.Series<
-  Polars[3]
-  integer [3, 4, 5]
->
+
iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5])
+iex> Explorer.Series.slice(s, 1, 2)
+#Explorer.Series<
+  Polars[2]
+  integer [2, 3]
+>

Negative offsets count from the end of the series:

iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5])
+iex> Explorer.Series.slice(s, -3, 2)
+#Explorer.Series<
+  Polars[2]
+  integer [3, 4]
+>

If the offset runs past the end of the series, +the series is empty:

iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5])
+iex> Explorer.Series.slice(s, 10, 3)
+#Explorer.Series<
+  Polars[0]
+  integer []
+>

If the size runs past the end of the series, +the result may be shorter than the size:

iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5])
+iex> Explorer.Series.slice(s, -3, 4)
+#Explorer.Series<
+  Polars[3]
+  integer [3, 4, 5]
+>
@@ -7175,19 +7175,19 @@

sort(series, opts \\ [])

Examples -
iex> s = Explorer.Series.from_list([9, 3, 7, 1])
-iex> Explorer.Series.sort(s)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 3, 7, 9]
->
+
iex> s = Explorer.Series.from_list([9, 3, 7, 1])
+iex> Explorer.Series.sort(s)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 3, 7, 9]
+>
 
-iex> s = Explorer.Series.from_list([9, 3, 7, 1])
-iex> Explorer.Series.sort(s, direction: :desc)
-#Explorer.Series<
-  Polars[4]
-  integer [9, 7, 3, 1]
->
+
iex> s = Explorer.Series.from_list([9, 3, 7, 1]) +iex> Explorer.Series.sort(s, direction: :desc) +#Explorer.Series< + Polars[4] + integer [9, 7, 3, 1] +>
@@ -7223,12 +7223,12 @@

tail(series, n_elements \\ 10)

Examples -
iex> s = 1..100 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.tail(s)
-#Explorer.Series<
-  Polars[10]
-  integer [91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
->
+
iex> s = 1..100 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.tail(s)
+#Explorer.Series<
+  Polars[10]
+  integer [91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
+>
@@ -7256,8 +7256,8 @@

unordered_distinct(series)

Examples -
iex> s = [1, 1, 2, 2, 3, 3] |> Explorer.Series.from_list()
-iex> Explorer.Series.unordered_distinct(s)
+
iex> s = [1, 1, 2, 2, 3, 3] |> Explorer.Series.from_list()
+iex> Explorer.Series.unordered_distinct(s)
@@ -7311,26 +7311,26 @@

cumulative_max(series, opts \\ [])

Examples -
iex> s = [1, 2, 3, 4] |> Explorer.Series.from_list()
-iex> Explorer.Series.cumulative_max(s)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 3, 4]
->
+
iex> s = [1, 2, 3, 4] |> Explorer.Series.from_list()
+iex> Explorer.Series.cumulative_max(s)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 3, 4]
+>
 
-iex> s = [1, 2, nil, 4] |> Explorer.Series.from_list()
-iex> Explorer.Series.cumulative_max(s)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, nil, 4]
->
+iex> s = [1, 2, nil, 4] |> Explorer.Series.from_list()
+iex> Explorer.Series.cumulative_max(s)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, nil, 4]
+>
 
-iex> s = [~T[03:00:02.000000], ~T[02:04:19.000000], nil, ~T[13:24:56.000000]] |> Explorer.Series.from_list()
-iex> Explorer.Series.cumulative_max(s)
-#Explorer.Series<
-  Polars[4]
-  time [03:00:02.000000, 03:00:02.000000, nil, 13:24:56.000000]
->
+
iex> s = [~T[03:00:02.000000], ~T[02:04:19.000000], nil, ~T[13:24:56.000000]] |> Explorer.Series.from_list() +iex> Explorer.Series.cumulative_max(s) +#Explorer.Series< + Polars[4] + time [03:00:02.000000, 03:00:02.000000, nil, 13:24:56.000000] +>
@@ -7372,26 +7372,26 @@

cumulative_min(series, opts \\ [])

Examples -
iex> s = [1, 2, 3, 4] |> Explorer.Series.from_list()
-iex> Explorer.Series.cumulative_min(s)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 1, 1, 1]
->
+
iex> s = [1, 2, 3, 4] |> Explorer.Series.from_list()
+iex> Explorer.Series.cumulative_min(s)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 1, 1, 1]
+>
 
-iex> s = [1, 2, nil, 4] |> Explorer.Series.from_list()
-iex> Explorer.Series.cumulative_min(s)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 1, nil, 1]
->
+iex> s = [1, 2, nil, 4] |> Explorer.Series.from_list()
+iex> Explorer.Series.cumulative_min(s)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 1, nil, 1]
+>
 
-iex> s = [~T[03:00:02.000000], ~T[02:04:19.000000], nil, ~T[13:24:56.000000]] |> Explorer.Series.from_list()
-iex> Explorer.Series.cumulative_min(s)
-#Explorer.Series<
-  Polars[4]
-  time [03:00:02.000000, 02:04:19.000000, nil, 02:04:19.000000]
->
+
iex> s = [~T[03:00:02.000000], ~T[02:04:19.000000], nil, ~T[13:24:56.000000]] |> Explorer.Series.from_list() +iex> Explorer.Series.cumulative_min(s) +#Explorer.Series< + Polars[4] + time [03:00:02.000000, 02:04:19.000000, nil, 02:04:19.000000] +>
@@ -7433,19 +7433,19 @@

cumulative_product(series, opts \\ [])

Examples -
iex> s = [1, 2, 3, 2] |> Explorer.Series.from_list()
-iex> Explorer.Series.cumulative_product(s)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 6, 12]
->
+
iex> s = [1, 2, 3, 2] |> Explorer.Series.from_list()
+iex> Explorer.Series.cumulative_product(s)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 6, 12]
+>
 
-iex> s = [1, 2, nil, 4] |> Explorer.Series.from_list()
-iex> Explorer.Series.cumulative_product(s)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, nil, 8]
->
+
iex> s = [1, 2, nil, 4] |> Explorer.Series.from_list() +iex> Explorer.Series.cumulative_product(s) +#Explorer.Series< + Polars[4] + integer [1, 2, nil, 8] +>
@@ -7487,19 +7487,19 @@

cumulative_sum(series, opts \\ [])

Examples -
iex> s = [1, 2, 3, 4] |> Explorer.Series.from_list()
-iex> Explorer.Series.cumulative_sum(s)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 3, 6, 10]
->
+
iex> s = [1, 2, 3, 4] |> Explorer.Series.from_list()
+iex> Explorer.Series.cumulative_sum(s)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 3, 6, 10]
+>
 
-iex> s = [1, 2, nil, 4] |> Explorer.Series.from_list()
-iex> Explorer.Series.cumulative_sum(s)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 3, nil, 7]
->
+
iex> s = [1, 2, nil, 4] |> Explorer.Series.from_list() +iex> Explorer.Series.cumulative_sum(s) +#Explorer.Series< + Polars[4] + integer [1, 3, nil, 7] +>
@@ -7538,19 +7538,19 @@

ewm_mean(series, opts \\ [])

Examples -
iex> s = 1..5 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.ewm_mean(s)
-#Explorer.Series<
-  Polars[5]
-  float [1.0, 1.6666666666666667, 2.4285714285714284, 3.2666666666666666, 4.161290322580645]
->
+
iex> s = 1..5 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.ewm_mean(s)
+#Explorer.Series<
+  Polars[5]
+  float [1.0, 1.6666666666666667, 2.4285714285714284, 3.2666666666666666, 4.161290322580645]
+>
 
-iex> s = 1..5 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.ewm_mean(s, alpha: 0.1)
-#Explorer.Series<
-  Polars[5]
-  float [1.0, 1.5263157894736843, 2.070110701107011, 2.6312881651642916, 3.2097140484969833]
->
+
iex> s = 1..5 |> Enum.to_list() |> Explorer.Series.from_list() +iex> Explorer.Series.ewm_mean(s, alpha: 0.1) +#Explorer.Series< + Polars[5] + float [1.0, 1.5263157894736843, 2.070110701107011, 2.6312881651642916, 3.2097140484969833] +>
@@ -7602,73 +7602,73 @@

fill_missing(series, value)

Examples -
iex> s = Explorer.Series.from_list([1, 2, nil, 4])
-iex> Explorer.Series.fill_missing(s, :forward)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 2, 4]
->
-
-iex> s = Explorer.Series.from_list([1, 2, nil, 4])
-iex> Explorer.Series.fill_missing(s, :backward)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 4, 4]
->
-
-iex> s = Explorer.Series.from_list([1, 2, nil, 4])
-iex> Explorer.Series.fill_missing(s, :max)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 4, 4]
->
-
-iex> s = Explorer.Series.from_list([1, 2, nil, 4])
-iex> Explorer.Series.fill_missing(s, :min)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 1, 4]
->
-
-iex> s = Explorer.Series.from_list([1, 2, nil, 4])
-iex> Explorer.Series.fill_missing(s, :mean)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 2, 4]
->

Values that belong to the series itself can also be added as missing:

iex> s = Explorer.Series.from_list([1, 2, nil, 4])
-iex> Explorer.Series.fill_missing(s, 3)
-#Explorer.Series<
-  Polars[4]
-  integer [1, 2, 3, 4]
->
-
-iex> s = Explorer.Series.from_list(["a", "b", nil, "d"])
-iex> Explorer.Series.fill_missing(s, "c")
-#Explorer.Series<
-  Polars[4]
-  string ["a", "b", "c", "d"]
->

Mismatched types will raise:

iex> s = Explorer.Series.from_list([1, 2, nil, 4])
-iex> Explorer.Series.fill_missing(s, "foo")
-** (ArgumentError) cannot invoke Explorer.Series.fill_missing/2 with mismatched dtypes: :integer and "foo"

Floats in particular accept missing values to be set to NaN, Inf, and -Inf:

iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 4.0])
-iex> Explorer.Series.fill_missing(s, :nan)
-#Explorer.Series<
-  Polars[4]
-  float [1.0, 2.0, NaN, 4.0]
->
-
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 4.0])
-iex> Explorer.Series.fill_missing(s, :infinity)
-#Explorer.Series<
-  Polars[4]
-  float [1.0, 2.0, Inf, 4.0]
->
-
-iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 4.0])
-iex> Explorer.Series.fill_missing(s, :neg_infinity)
-#Explorer.Series<
-  Polars[4]
-  float [1.0, 2.0, -Inf, 4.0]
->
+
iex> s = Explorer.Series.from_list([1, 2, nil, 4])
+iex> Explorer.Series.fill_missing(s, :forward)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 2, 4]
+>
+
+iex> s = Explorer.Series.from_list([1, 2, nil, 4])
+iex> Explorer.Series.fill_missing(s, :backward)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 4, 4]
+>
+
+iex> s = Explorer.Series.from_list([1, 2, nil, 4])
+iex> Explorer.Series.fill_missing(s, :max)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 4, 4]
+>
+
+iex> s = Explorer.Series.from_list([1, 2, nil, 4])
+iex> Explorer.Series.fill_missing(s, :min)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 1, 4]
+>
+
+iex> s = Explorer.Series.from_list([1, 2, nil, 4])
+iex> Explorer.Series.fill_missing(s, :mean)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 2, 4]
+>

Values that belong to the series itself can also be added as missing:

iex> s = Explorer.Series.from_list([1, 2, nil, 4])
+iex> Explorer.Series.fill_missing(s, 3)
+#Explorer.Series<
+  Polars[4]
+  integer [1, 2, 3, 4]
+>
+
+iex> s = Explorer.Series.from_list(["a", "b", nil, "d"])
+iex> Explorer.Series.fill_missing(s, "c")
+#Explorer.Series<
+  Polars[4]
+  string ["a", "b", "c", "d"]
+>

Mismatched types will raise:

iex> s = Explorer.Series.from_list([1, 2, nil, 4])
+iex> Explorer.Series.fill_missing(s, "foo")
+** (ArgumentError) cannot invoke Explorer.Series.fill_missing/2 with mismatched dtypes: :integer and "foo"

Floats in particular accept missing values to be set to NaN, Inf, and -Inf:

iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 4.0])
+iex> Explorer.Series.fill_missing(s, :nan)
+#Explorer.Series<
+  Polars[4]
+  float [1.0, 2.0, NaN, 4.0]
+>
+
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 4.0])
+iex> Explorer.Series.fill_missing(s, :infinity)
+#Explorer.Series<
+  Polars[4]
+  float [1.0, 2.0, Inf, 4.0]
+>
+
+iex> s = Explorer.Series.from_list([1.0, 2.0, nil, 4.0])
+iex> Explorer.Series.fill_missing(s, :neg_infinity)
+#Explorer.Series<
+  Polars[4]
+  float [1.0, 2.0, -Inf, 4.0]
+>
@@ -7706,19 +7706,19 @@

window_max(series, window_size, opts \\ []) Examples

-
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.window_max(s, 4)
-#Explorer.Series<
-  Polars[10]
-  integer [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
->
+
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.window_max(s, 4)
+#Explorer.Series<
+  Polars[10]
+  integer [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+>
 
-iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.window_max(s, 2, weights: [1.0, 2.0])
-#Explorer.Series<
-  Polars[10]
-  float [1.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0]
->
+
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list() +iex> Explorer.Series.window_max(s, 2, weights: [1.0, 2.0]) +#Explorer.Series< + Polars[10] + float [1.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0] +>
@@ -7756,26 +7756,26 @@

window_mean(series, window_size, opts \\ [] Examples

-
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.window_mean(s, 4)
-#Explorer.Series<
-  Polars[10]
-  float [1.0, 1.5, 2.0, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5]
->
+
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.window_mean(s, 4)
+#Explorer.Series<
+  Polars[10]
+  float [1.0, 1.5, 2.0, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5]
+>
 
-iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.window_mean(s, 2, weights: [0.25, 0.75])
-#Explorer.Series<
-  Polars[10]
-  float [0.25, 1.75, 2.75, 3.75, 4.75, 5.75, 6.75, 7.75, 8.75, 9.75]
->
+iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.window_mean(s, 2, weights: [0.25, 0.75])
+#Explorer.Series<
+  Polars[10]
+  float [0.25, 1.75, 2.75, 3.75, 4.75, 5.75, 6.75, 7.75, 8.75, 9.75]
+>
 
-iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.window_mean(s, 2, weights: [0.25, 0.75], min_periods: nil)
-#Explorer.Series<
-  Polars[10]
-  float [nil, 1.75, 2.75, 3.75, 4.75, 5.75, 6.75, 7.75, 8.75, 9.75]
->
+
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list() +iex> Explorer.Series.window_mean(s, 2, weights: [0.25, 0.75], min_periods: nil) +#Explorer.Series< + Polars[10] + float [nil, 1.75, 2.75, 3.75, 4.75, 5.75, 6.75, 7.75, 8.75, 9.75] +>
@@ -7813,19 +7813,19 @@

window_min(series, window_size, opts \\ []) Examples

-
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.window_min(s, 4)
-#Explorer.Series<
-  Polars[10]
-  integer [1, 1, 1, 1, 2, 3, 4, 5, 6, 7]
->
+
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.window_min(s, 4)
+#Explorer.Series<
+  Polars[10]
+  integer [1, 1, 1, 1, 2, 3, 4, 5, 6, 7]
+>
 
-iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.window_min(s, 2, weights: [1.0, 2.0])
-#Explorer.Series<
-  Polars[10]
-  float [1.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
->
+
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list() +iex> Explorer.Series.window_min(s, 2, weights: [1.0, 2.0]) +#Explorer.Series< + Polars[10] + float [1.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] +>
@@ -7863,19 +7863,19 @@

window_standard_deviation(series, window_si Examples

-
iex> s = Explorer.Series.from_list([1, 2, 3, 4, 1])
-iex> Explorer.Series.window_standard_deviation(s, 2)
-#Explorer.Series<
-  Polars[5]
-  float [0.0, 0.7071067811865476, 0.7071067811865476, 0.7071067811865476, 2.1213203435596424]
->
+
iex> s = Explorer.Series.from_list([1, 2, 3, 4, 1])
+iex> Explorer.Series.window_standard_deviation(s, 2)
+#Explorer.Series<
+  Polars[5]
+  float [0.0, 0.7071067811865476, 0.7071067811865476, 0.7071067811865476, 2.1213203435596424]
+>
 
-iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5, 6])
-iex> Explorer.Series.window_standard_deviation(s, 2, weights: [0.25, 0.75])
-#Explorer.Series<
-  Polars[6]
-  float [0.4330127018922193, 0.4330127018922193, 0.4330127018922193, 0.4330127018922193, 0.4330127018922193, 0.4330127018922193]
->
+
iex> s = Explorer.Series.from_list([1, 2, 3, 4, 5, 6]) +iex> Explorer.Series.window_standard_deviation(s, 2, weights: [0.25, 0.75]) +#Explorer.Series< + Polars[6] + float [0.4330127018922193, 0.4330127018922193, 0.4330127018922193, 0.4330127018922193, 0.4330127018922193, 0.4330127018922193] +>
@@ -7913,19 +7913,19 @@

window_sum(series, window_size, opts \\ []) Examples

-
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.window_sum(s, 4)
-#Explorer.Series<
-  Polars[10]
-  integer [1, 3, 6, 10, 14, 18, 22, 26, 30, 34]
->
+
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
+iex> Explorer.Series.window_sum(s, 4)
+#Explorer.Series<
+  Polars[10]
+  integer [1, 3, 6, 10, 14, 18, 22, 26, 30, 34]
+>
 
-iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list()
-iex> Explorer.Series.window_sum(s, 2, weights: [1.0, 2.0])
-#Explorer.Series<
-  Polars[10]
-  float [1.0, 5.0, 8.0, 11.0, 14.0, 17.0, 20.0, 23.0, 26.0, 29.0]
->
+
iex> s = 1..10 |> Enum.to_list() |> Explorer.Series.from_list() +iex> Explorer.Series.window_sum(s, 2, weights: [1.0, 2.0]) +#Explorer.Series< + Polars[10] + float [1.0, 5.0, 8.0, 11.0, 14.0, 17.0, 20.0, 23.0, 26.0, 29.0] +>
diff --git a/Explorer.TensorFrame.html b/Explorer.TensorFrame.html index b2307c875..d84bc00ac 100644 --- a/Explorer.TensorFrame.html +++ b/Explorer.TensorFrame.html @@ -113,13 +113,13 @@

TensorFrame is a representation of Explorer.DataFrame -that is designed to work inside Nx's defn expressions.

For example, imagine the following defn:

defn add_columns(tf) do
-  tf[:a] + tf[:b]
-end

We can now pass a DataFrame as argument:

iex> add_columns(Explorer.DataFrame.new(a: [11, 12], b: [21, 22]))
-#Nx.Tensor<
-  s64[2]
-  [32, 34]
->

Passing an Explorer.DataFrame to a defn will automatically +that is designed to work inside Nx's defn expressions.

For example, imagine the following defn:

defn add_columns(tf) do
+  tf[:a] + tf[:b]
+end

We can now pass a DataFrame as argument:

iex> add_columns(Explorer.DataFrame.new(a: [11, 12], b: [21, 22]))
+#Nx.Tensor<
+  s64[2]
+  [32, 34]
+>

Passing an Explorer.DataFrame to a defn will automatically convert it to a TensorFrame. The TensorFrame will lazily build tensors out of the used dataframe fields.

@@ -130,29 +130,29 @@

Due to the integration with Nx, you can also pass dataframes into Nx.stack/2 and Nx.concatenate and they will be automatically converted to tensors. This makes it easy to pass dataframes into -neural networks and other computationally intensive algorithms:

iex> Nx.concatenate(Explorer.DataFrame.new(a: [11, 12], b: [21, 22]))
-#Nx.Tensor<
-  s64[4]
-  [11, 12, 21, 22]
->
-
-iex> Nx.stack(Explorer.DataFrame.new(a: [11, 12], b: [21, 22]))
-#Nx.Tensor<
-  s64[2][2]
-  [
-    [11, 12],
-    [21, 22]
-  ]
->
-
-iex> Nx.stack(Explorer.DataFrame.new(a: [11, 12], b: [21, 22]), axis: -1)
-#Nx.Tensor<
-  s64[2][2]
-  [
-    [11, 21],
-    [12, 22]
-  ]
->

+neural networks and other computationally intensive algorithms:

iex> Nx.concatenate(Explorer.DataFrame.new(a: [11, 12], b: [21, 22]))
+#Nx.Tensor<
+  s64[4]
+  [11, 12, 21, 22]
+>
+
+iex> Nx.stack(Explorer.DataFrame.new(a: [11, 12], b: [21, 22]))
+#Nx.Tensor<
+  s64[2][2]
+  [
+    [11, 12],
+    [21, 22]
+  ]
+>
+
+iex> Nx.stack(Explorer.DataFrame.new(a: [11, 12], b: [21, 22]), axis: -1)
+#Nx.Tensor<
+  s64[2][2]
+  [
+    [11, 21],
+    [12, 22]
+  ]
+>

Warning: returning TensorFrames @@ -165,14 +165,14 @@

above we used Nx to add two columns, if you want to put the result of the computation back into a DataFrame, you can use Explorer.DataFrame.put/4, which also accepts -tensors:

iex> df = Explorer.DataFrame.new(a: [11, 12], b: [21, 22])
-iex> Explorer.DataFrame.put(df, "result", add_columns(df))
-#Explorer.DataFrame<
-  Polars[2 x 3]
-  a integer [11, 12]
-  b integer [21, 22]
-  result integer [32, 34]
->

One benefit of using Explorer.DataFrame.put/4 is that it will +tensors:

iex> df = Explorer.DataFrame.new(a: [11, 12], b: [21, 22])
+iex> Explorer.DataFrame.put(df, "result", add_columns(df))
+#Explorer.DataFrame<
+  Polars[2 x 3]
+  a integer [11, 12]
+  b integer [21, 22]
+  result integer [32, 34]
+>

One benefit of using Explorer.DataFrame.put/4 is that it will preserve the type of the column if one already exists. Alternatively, use Explorer.Series.from_tensor/1 to explicitly convert a tensor back to a series.

@@ -311,7 +311,7 @@

pull(tf, name)

Examples

-
Explorer.TensorFrame.pull(tf, "some_column")
+
Explorer.TensorFrame.pull(tf, "some_column")

@@ -339,7 +339,7 @@

put(tf, name, tensor)

Examples

-
Explorer.TensorFrame.put(tf, "result", some_tensor)
+
Explorer.TensorFrame.put(tf, "result", some_tensor)
diff --git a/Explorer.epub b/Explorer.epub index d7d7fdff626cd5c8d7ab80fd698ac2876a4de977..b4348bbbeefdd81d12e9184605e27a85593eb598 100644 GIT binary patch delta 264828 zcmY(qLwGLC^92~&wr$(?jcwb`P2SkHZQHhO+t!UU-|s)qET(%=z3N@nIj5@5?g7@y z0T#TXEGQTn(ErYB?t20}C+L5nK{5yUf3fKdI1B{(zlXZ^b-qb{k_Q+!0P$`!g0SUZ zd=zTGT~cSnT_6b+NUd0nr)&a^^bKfOSKoJUL9y@p=lv%2JW)Rl3U~GxC+i*)=APd7 z1>ryZdU!VkQJVkA^NHBd!SN z`qu?EEFdu4B>^)CottGAkVI7B;pw@^++p+Fa6p32cN><2nQ@;jPTi*PHYIV8v}zUP zRvD-7P5#j)()3RmQ=jV;-iLQ4rD3pf_0Z|>y5Guei!pQWd2&{2u}yBo)TpARQ3q%1 z07+5LJlE~b^Q2hwI}`wOjHW_zdd~U!(fE=#!3Ewtq|=s5P-U(#l7t~PmcPS%S|Zb zX{lm>pvY~Iatf1DgJ>=em3OqF=D%UVo)bKLff!4v;EAscU!OOx*gfan^;E2#1GL(#ln)&ZoFrp@0IPN)(Vu69&UfAw-=`4#tJc6? zd%sFpzeB&hgdc=h1)ueQAFy(MyUJwZoMs+4)}o6!0FgR?S%RC?BY1n_CqmGsJwniP z%$HJx5+Xklp3bjtFrx6Bz`$Hr7;cWFn=Gf*6W{ zCK{HQ79MlJsvMpROH!l`4QICR$IF>DqUumbee76)cOlpD6bHUg@btN=?Q{*ctSXtp zqVqMyMMnly7FuLaZwErDx$acAkX530dwuKjZc#WlR%*G(IaC~Wn)Xa?!*FKwyJ|hG zzM8$YdhMmU{%BK!5M^QNie^pJI%A9F^O?;l^U*gI1umMS)}VPQ7nX)SJJ;wgY*H|b zOl*EX&q2S)v>tgzF>_j`$jC>3(gGwd@K(|dBq^{@5;7DO@LUoP6t5_$zohxXU_^?` z^m2!rIJBacC=q=CN)fF2B58Vr*p|hd=<)8~kF_X@Psf*|G6Mm&4fr+y+8}3;CC__{ zI7$6g7H3jB6qC>$l<7_X%1`M?@zRd}9(&f{BRSWaus5W

5K({f6)X%rcNhJ6?br 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 z zm=k?}FKQ@NPLqA45<*oFZWzU>8U*o4F`e4ESJWzL0PJZTBKmWKM4o!wy2V}1qVj5u zvT*87Eo%htxJ#vur?SrdNl}cD8pU^d=+YXs>NZLHm8(?Zza?#eUWaZ1o`AUex7XeHmh(U+!YX zcE}gM{}7+lwwyq6jdPYW7u7~@+Fma>tQ5QVIci;tB}Ra51?pe=>n&=KU%o-q*cWLGA-im}M9tY%=u3p`JJ#FujhaJZ-1-mJCt zQ0~bpMp_-txHP};wGkQsWx}wLV@K^<9?97asKp8&VAoQCxjD%xtF52KH?)SO{?^!~ z8cf0m!;=NCd9khO;TKcn(Zm(l2|a zENsYLIz}c%gfj-b`XPZ+wg%K#j2z1tg%ooRR}>4H4f0kMmHEi9+8FM^P-NywiU2oQ zVU$@YkYK${w{l1>yC8thT!5@p=H=OI*hnB47N!Paum4R>FSaa(JC+%CHvQYdx1GMo zC45u=CgaEha|mk3KUR#wR0{`{vfoi)X?!o)XC1cN?T|p4L4P(ky1PK9m#$1&CZhPC zSZW2$4izaKsepS1erS@nZh}JT5SaO&!NSOwB+(iGZSQvpoo5ANm{7Zn6?*Qk^IF|!|=pRO|0EH{}b72 z51ts*BJ+f=yq=lQ7UxDQB!M?3&RX4X!Zh(DcY(4^S>bI!UFcLuNA8{S*DD4u>Ydraui_@ zI5|z?stmH5$)a9$_``BHZfg{{iM|c~M>{LA6&(#%XJ>luON4pv=zk;4z zbgR9quBYwoqGs7H$NVQ_?0K=OW zMhOU7XlslJ*FhxHtX*hjL=g+>h_vTqNeX3(-@-X=5EGK%I{ZZh0tK{REtKOVkgF)H z7Goxy$n+Ai`x02nor|8kK))9=bT>sto-OE51y3<3CNyCLA`v_UmF`?pur`@Xzkw0e z5&a{%lk=OQ?lF?B9!v?1D}FKE}r`EjYKo5dyTC``DALWocH|DaV+C*VnU`c zU(L97xvvFT>$;om1N^^#A)5VhUrOelJIquK;hF`8EWrTx{xo-=%brR)hrbj{RPv|X zWb1Wx;9_zV>xP-OwCAA_J6>#i76Rr}CI>@qlCe!>l#~!cQRB{tGH3uyCL1*=cQHel zB}5-wa7dCRqC-$Nq^2+OZSz>?<0NlK;-wR}oAOw0HUiiLtvecCSV&F54rZVwM*&}O z`1WIL8mxHHBE`+VML(=Iq?hEQBd$N08mOeS%@`>PLDRS2LDi(=l)AJ^k1~5;s?`(~ zvJe8LbGVcb+*nU@LQOz*SGo{}c@@@fP;Whpnyv@D&lPo zmAE)(r2!m_aOCmO_d2-nFdOa%KZn!j%K;bNh^_J%X({y@aS>wMZ*1OABrlcU#%M&x z-cz@>S3Mm9x_bjk%l4mYkgpK&r-PeV7wbuL;sMo;_K_|LW?bNcl^D7YK{ovmac0J> zSIB`wDNgn3B1OV0;M3dpjol3F=XZh`Y0sN-)3~zs^I9ZIi%%s*Fwo|L^nb@Gj8zmXqdOjn)u{~F$4ES#jvov>UFv$Aen!(8 zjlYV?!*)IAye8LUUbuZ-;yaoWFZT$2J&T?^!cIw`@5SUSy)t>VQ5I5TS?40XvI*jI z&@n*^7}59dm4z@C-DRS=gEt-hyZXARe@wo{{-0<_OHW~s8^iC5XD_53D4N-dL4y#h zo|)s98J^8ccL+D0c`EF^f9HMz=y82>7!Q$wtbD?sdeNK3spXFa`Dob+kZR3; z8<I&T>Mww#|ihKT=#iz9DJIr{zWl>e7^L$uE<4?+Sf6STtxAs|50}hN$CMP&k z76W|*$+2o}%fWFB$eFuu=TuL=HWdeOEA*}BkoE;)+HY8E8FWyb5WkQ=E zT|^d(uE+WEB3r%-$U__EZo#ks;>e&xa1Oi`mnDCbq?gaD{Fsq_TSnJqvYsk!iTBh+({*afDH7OVf(2Ma

$xE^@NKWCII#}2& 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�mdj$ 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%0D@Nc;_OK%8MY@>V*N7{=eQG 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

j;Hf0c+TSj}RVM{YTr5xd%ip|8VUSN#@=r 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 diff --git a/Explorer.html b/Explorer.html index f831d0560..be48f2a69 100644 --- a/Explorer.html +++ b/Explorer.html @@ -119,13 +119,13 @@

Getting started

-

Inside an Elixir script or Livebook:

Mix.install([
-  {:explorer, "~> 0.6.0"}
-])

Or in the mix.exs file of your application:

def deps do
-  [
-    {:explorer, "~> 0.6.0"}
-  ]
-end

+

Inside an Elixir script or Livebook:

Mix.install([
+  {:explorer, "~> 0.6.0"}
+])

Or in the mix.exs file of your application:

def deps do
+  [
+    {:explorer, "~> 0.6.0"}
+  ]
+end

A glimpse of the API @@ -135,13 +135,13 @@

of one data type only - or one dtype for short. Notice that nil values are permitted in series of any dtype.

  • using a dataframe, that is just a way to represent one or more series together, and work with them as a whole. The only restriction is that all the series shares -the same size.

  • A series can be created from a list:

    fruits = Explorer.Series.from_list(["apple", "mango", "banana", "orange"])

    Your newly created series is going to look like:

    #Explorer.Series<
    -  Polars[4]
    -  string ["apple", "mango", "banana", "orange"]
    ->

    And you can, for example, sort that series:

    Explorer.Series.sort(fruits)

    Resulting in the following:

    #Explorer.Series<
    -  Polars[4]
    -  string ["apple", "banana", "mango", "orange"]
    ->

    +the same size.

    A series can be created from a list:

    fruits = Explorer.Series.from_list(["apple", "mango", "banana", "orange"])

    Your newly created series is going to look like:

    #Explorer.Series<
    +  Polars[4]
    +  string ["apple", "mango", "banana", "orange"]
    +>

    And you can, for example, sort that series:

    Explorer.Series.sort(fruits)

    Resulting in the following:

    #Explorer.Series<
    +  Polars[4]
    +  string ["apple", "banana", "mango", "orange"]
    +>

    Dataframes @@ -151,13 +151,13 @@

    IO functions. This is by far the most common way to load dataframes in Explorer. We accept Parquet, IPC, CSV, and NDJSON files.

  • by using the Explorer.DataFrame.new/2 function, that is neat for small experiments. -We are going to use this function here.

  • You can pass either series or lists to it:

    mountains = Explorer.DataFrame.new(name: ["Everest", "K2", "Aconcagua"], elevation: [8848, 8611, 6962])

    Your dataframe is going to look like this:

    #Explorer.DataFrame<
    -  Polars[3 x 2]
    -  name string ["Everest", "K2", "Aconcagua"]
    -  elevation integer [8848, 8611, 6962]
    ->

    It's also possible to see a dataframe like a table, using the Explorer.DataFrame.table/2 -function:

    Explorer.DataFrame.table(mountains)

    Prints:

    +-------------------------------------------+
    -| Explorer DataFrame: [rows: 3, columns: 2] |
    +We are going to use this function here.

    You can pass either series or lists to it:

    mountains = Explorer.DataFrame.new(name: ["Everest", "K2", "Aconcagua"], elevation: [8848, 8611, 6962])

    Your dataframe is going to look like this:

    #Explorer.DataFrame<
    +  Polars[3 x 2]
    +  name string ["Everest", "K2", "Aconcagua"]
    +  elevation integer [8848, 8611, 6962]
    +>

    It's also possible to see a dataframe like a table, using the Explorer.DataFrame.table/2 +function:

    Explorer.DataFrame.table(mountains)

    Prints:

    +-------------------------------------------+
    +| Explorer DataFrame: [rows: 3, columns: 2] |
     +---------------------+---------------------+
     |        name         |      elevation      |
     |      <string>       |      <integer>      |
    @@ -170,13 +170,13 @@ 

    +---------------------+---------------------+

    And now I want to show you how to filter our dataframe. But first, let's require the Explorer.DataFrame module and give a short name to it:

    require Explorer.DataFrame, as: DF

    The "require" is needed to load the macro features of that module. We give it a shorter name to simplify our examples.

    Now let's go to the filter. I want to filter the mountains that are above -the mean elevation in our dataframe:

    DF.filter(mountains, elevation > mean(elevation))

    You can see that we can refer to the columns using their names, and use functions +the mean elevation in our dataframe:

    DF.filter(mountains, elevation > mean(elevation))

    You can see that we can refer to the columns using their names, and use functions without define them. This is possible due the powerful Explorer.Query features, -and it's the main reason we need to "require" the Explorer.DataFrame module.

    The result is going to look like this:

    #Explorer.DataFrame<
    -  Polars[2 x 2]
    -  name string ["Everest", "K2"]
    -  elevation integer [8848, 8611]
    ->

    There is an extensive guide that you can play with Livebook: +and it's the main reason we need to "require" the Explorer.DataFrame module.

    The result is going to look like this:

    #Explorer.DataFrame<
    +  Polars[2 x 2]
    +  name string ["Everest", "K2"]
    +  elevation integer [8848, 8611]
    +>

    There is an extensive guide that you can play with Livebook: Ten Minutes to Explorer

    You can also check the Explorer.DataFrame and Explorer.Series docs for further details.

    diff --git a/changelog.html b/changelog.html index b6bbbbc60..66661cbb9 100644 --- a/changelog.html +++ b/changelog.html @@ -307,13 +307,13 @@

    • Add across and comprehensions to Explorer.Query. These features allow a -more flexible and elegant way to work with multiple columns at once. Example:

      iris = Explorer.Datasets.iris()
      -Explorer.DataFrame.mutate(iris,
      - for col <- across(["sepal_width", "sepal_length", "petal_length", "petal_width"]) do
      -   {col.name, (col - mean(col)) / variance(col)}
      - end
      -)

      See the Explorer.Query documentation for further details.

    • Add support for regexes to select columns of a dataframe. Example:

      df = Explorer.Datasets.wine()
      -df[~r/(class|hue)/]
    • Add the :max_rows and :columns options to Explorer.DataFrame.from_parquet/2. This mirrors +more flexible and elegant way to work with multiple columns at once. Example:

      iris = Explorer.Datasets.iris()
      +Explorer.DataFrame.mutate(iris,
      + for col <- across(["sepal_width", "sepal_length", "petal_length", "petal_width"]) do
      +   {col.name, (col - mean(col)) / variance(col)}
      + end
      +)

      See the Explorer.Query documentation for further details.

    • Add support for regexes to select columns of a dataframe. Example:

      df = Explorer.Datasets.wine()
      +df[~r/(class|hue)/]
    • Add the :max_rows and :columns options to Explorer.DataFrame.from_parquet/2. This mirrors the from_csv/2 function.

    • Allow Explorer.Series functions that accept floats to work with :nan, :infinity and :neg_infinity values.

    • Add Explorer.DataFrame.shuffle/2 and Explorer.Series.shuffle/2.

    • Add support for a list of filters in Explorer.DataFrame.filter/2. These filters are joined as and expressions.

    @@ -368,7 +368,7 @@

    • Add DataFrame.describe/2 to gather some statistics from a dataframe.

    • Add Series.nil_count/1 to count nil values.

    • Add Series.in/2 to check if a given value is inside a series.

    • Add Series float predicates: is_finite/1, is_infinite/1 and is_nan/1.

    • Add Series string functions: contains/2, trim/1, trim_leading/1, trim_trailing/1, upcase/1 and downcase/1.

    • Enable slicing of lazy frames (LazyFrame).

    • Add IO operations "from/load" to the lazy frame implementation.

    • Add support for the :lazy option in the DataFrame.new/2 function.

    • Add Series float rounding methods: round/2, floor/1 and ceil/1.

    • Add support for precompiling to Linux running on RISCV CPUs.

    • Add support for precompiling to Linux - with musl - running on AARCH64 computers.

    • Allow DataFrame.new/1 to receive the :dtypes option.

    • Accept :nan as an option for Series.fill_missing/2 with float series.

    • Add basic support for the categorical dtype - the :category dtype.

    • Add Series.categories/1 to return categories from a categorical series.

    • Add Series.categorise/2 to categorise a series of integers using predefined categories.

    • Add Series.replace/2 to replace the contents of a series.

    • Support selecting columns with unusual names (like with spaces) inside Explorer.Query -with col/1.

      The usage is like this:

      Explorer.DataFrame.filter(df, col("my col") > 42)

    +with col/1.

    The usage is like this:

    Explorer.DataFrame.filter(df, col("my col") > 42)

    Fixed @@ -396,7 +396,7 @@

    • Add Series.quotient/2 and Series.remainder/2 to work with integer division.

    • Add Series.iotype/1 to return the underlying representation type.

    • Allow series on both sides of binary operations, like: add(series, 1) and add(1, series).

    • Allow comparison, concat and coalesce operations on "(series, lazy series)".

    • Add lazy version of Series.sample/3 and Series.size/1.

    • Add support for Arrow IPC Stream files.

    • Add Explorer.Query and the macros that allow a simplified query API. This is a huge improvement to some of the main functions, and allow refering to -columns as they were variables.

      Before this change we would need to write a filter like this:

      Explorer.DataFrame.filter_with(df, &Explorer.Series.greater(&1["col1"], 42))

      But now it's also possible to write this operation like this:

      Explorer.DataFrame.filter(df, col1 > 42)

      This operation is going to use filter_with/2 underneath, which means that +columns as they were variables.

      Before this change we would need to write a filter like this:

      Explorer.DataFrame.filter_with(df, &Explorer.Series.greater(&1["col1"], 42))

      But now it's also possible to write this operation like this:

      Explorer.DataFrame.filter(df, col1 > 42)

      This operation is going to use filter_with/2 underneath, which means that is going to use lazy series and compute the results at once. Notice that is mandatory to "require" the DataFrame module, since these operations are implemented as macros.

      The following new macros were added:

      • filter/2
      • mutate/2
      • summarise/2
      • arrange/2

      They substitute older versions that did not accept the new query syntax.

    • Add DataFrame.put/3 to enable adding or replacing columns in a eager manner. diff --git a/exploring_explorer.html b/exploring_explorer.html index 15f595f84..7130328d9 100644 --- a/exploring_explorer.html +++ b/exploring_explorer.html @@ -115,10 +115,10 @@

      -
      Mix.install([
      -  {:explorer, "~> 0.6.0"},
      -  {:kino, "~> 0.9.0"}
      -])

      +
      Mix.install([
      +  {:explorer, "~> 0.6.0"},
      +  {:kino, "~> 0.9.0"}
      +])

      Introduction @@ -131,29 +131,29 @@

      Reading and writing data

      -

      Data can be read from delimited files (like CSV), NDJSON, Parquet, and the Arrow IPC (feather) format. You can also load in data from a map or keyword list of columns with Explorer.DataFrame.new/1.

      For CSV, your 'usual suspects' of options are available:

      • delimiter - A single character used to separate fields within a record. (default: ",")
      • dtypes - A keyword list of [column_name: dtype]. If a type is not specified for a column, it is imputed from the first 1000 rows. (default: [])
      • header - Does the file have a header of column names as the first row or not? (default: true)
      • max_rows - Maximum number of lines to read. (default: nil)
      • null_character - The string that should be interpreted as a nil value. (default: "NA")
      • skip_rows - The number of lines to skip at the beginning of the file. (default: 0)
      • columns - A list of column names to keep. If present, only these columns are read into the dataframe. (default: nil)

      Explorer also has multiple example datasets built in, which you can load from the Explorer.Datasets module like so:

      df = Explorer.Datasets.fossil_fuels()

      You'll notice that the output looks slightly different than many dataframe libraries. Explorer takes inspiration on this front from glimpse in R. A benefit to this approach is that you will rarely need to elide columns.

      If you'd like to see a table with your data, we've got you covered there too.

      Explorer.DataFrame.table(df)

      Writing files is very similar to reading them. The options are a little more limited:

      • header - Should the column names be written as the first line of the file? (default: true)
      • delimiter - A single character used to separate fields within a record. (default: ",")

      First, let's add some useful aliases:

      alias Explorer.DataFrame
      -alias Explorer.Series

      And then write to a file of your choosing:

      input = Kino.Input.text("Filename")
      filename = Kino.Input.read(input)
      -DataFrame.to_csv(df, filename)

      +

      Data can be read from delimited files (like CSV), NDJSON, Parquet, and the Arrow IPC (feather) format. You can also load in data from a map or keyword list of columns with Explorer.DataFrame.new/1.

      For CSV, your 'usual suspects' of options are available:

      • delimiter - A single character used to separate fields within a record. (default: ",")
      • dtypes - A keyword list of [column_name: dtype]. If a type is not specified for a column, it is imputed from the first 1000 rows. (default: [])
      • header - Does the file have a header of column names as the first row or not? (default: true)
      • max_rows - Maximum number of lines to read. (default: nil)
      • null_character - The string that should be interpreted as a nil value. (default: "NA")
      • skip_rows - The number of lines to skip at the beginning of the file. (default: 0)
      • columns - A list of column names to keep. If present, only these columns are read into the dataframe. (default: nil)

      Explorer also has multiple example datasets built in, which you can load from the Explorer.Datasets module like so:

      df = Explorer.Datasets.fossil_fuels()

      You'll notice that the output looks slightly different than many dataframe libraries. Explorer takes inspiration on this front from glimpse in R. A benefit to this approach is that you will rarely need to elide columns.

      If you'd like to see a table with your data, we've got you covered there too.

      Explorer.DataFrame.table(df)

      Writing files is very similar to reading them. The options are a little more limited:

      • header - Should the column names be written as the first line of the file? (default: true)
      • delimiter - A single character used to separate fields within a record. (default: ",")

      First, let's add some useful aliases:

      alias Explorer.DataFrame
      +alias Explorer.Series

      And then write to a file of your choosing:

      input = Kino.Input.text("Filename")
      filename = Kino.Input.read(input)
      +DataFrame.to_csv(df, filename)

      Working with Series

      -

      Explorer, like Polars, works up from the concept of a Series. In many ways, you can think of a dataframe as a row-aligned map of Series. These are like vectors in R or series in Pandas.

      For simplicity, Explorer uses the following Series dtypes:

      • :float - 64-bit floating point number
      • :integer - 64-bit signed integer
      • :boolean - Boolean
      • :string - UTF-8 encoded binary
      • :date - Date type that unwraps to Elixir.Date
      • :datetime - DateTime type that unwraps to Elixir.NaiveDateTime

      Series can be constructed from Elixir basic types. For example:

      s1 = Series.from_list([1, 2, 3])
      s2 = Series.from_list(["a", "b", "c"])
      s3 = Series.from_list([~D[2011-01-01], ~D[1965-01-21]])

      You'll notice that the dtype and size of the Series are at the top of the printed value. You can get those programmatically as well.

      Series.dtype(s3)
      Series.size(s3)

      And the printed values max out at 50:

      1..100 |> Enum.to_list() |> Series.from_list()

      Series are also nullable.

      s = Series.from_list([1.0, 2.0, nil, nil, 5.0])

      And you can fill in those missing values using one of the following strategies:

      • :forward - replace nil with the previous value
      • :backward - replace nil with the next value
      • :max - replace nil with the series maximum
      • :min - replace nil with the series minimum
      • :mean - replace nil with the series mean
      Series.fill_missing(s, :forward)

      In the case of mixed numeric types (i.e. integers and floats), Series will downcast to a float:

      Series.from_list([1, 2.0])

      In all other cases, Series must all be of the same dtype or else you'll get an ArgumentError.

      Series.from_list([1, 2, 3, "a"])

      One of the goals of Explorer is useful error messages. If you look at the error above, you get:

      Cannot make a series from mismatched types. Type of "a" does not match inferred dtype integer.

      Hopefully this makes abundantly clear what's going on.

      Series also implements the Access protocol. You can slice and dice in many ways:

      s = 1..10 |> Enum.to_list() |> Series.from_list()
      s[1]
      s[-1]
      s[0..4]
      s[[0, 4, 4]]

      And of course, you can convert back to an Elixir list.

      Series.to_list(s)

      Explorer supports comparisons.

      s = 1..11 |> Enum.to_list() |> Series.from_list()
      s1 = 11..1 |> Enum.to_list() |> Series.from_list()
      Series.equal(s, s1)
      Series.equal(s, 5)
      Series.not_equal(s, 10)
      Series.greater_equal(s, 4)

      And arithmetic.

      Series.add(s, s1)
      Series.subtract(s, 4)
      Series.multiply(s, s1)

      Remember those helpful errors? We've tried to add those throughout. So if you try to do arithmetic with mismatching dtypes:

      s = Series.from_list([1, 2, 3])
      -s1 = Series.from_list([1.0, 2.0, 3.0])
      -Series.add(s, s1)

      Just kidding! Integers and floats will downcast to floats. Let's try again:

      s = Series.from_list([1, 2, 3])
      -s1 = Series.from_list(["a", "b", "c"])
      -Series.add(s, s1)

      You can flip them around.

      s = Series.from_list([1, 2, 3, 4])
      -Series.reverse(s)

      And sort.

      1..100 |> Enum.to_list() |> Enum.shuffle() |> Series.from_list() |> Series.sort()

      Or argsort.

      s = 1..100 |> Enum.to_list() |> Enum.shuffle() |> Series.from_list()
      -ids = Series.argsort(s) |> Series.to_list()

      Which you can pass to Explorer.Series.slice/2 if you want the sorted values.

      Series.slice(s, ids)

      You can calculate cumulative values.

      s = 1..100 |> Enum.to_list() |> Series.from_list()
      -Series.cumulative_sum(s)

      Or rolling ones.

      Series.window_sum(s, 4)

      You can count and list unique values.

      s = Series.from_list(["a", "b", "b", "c", "c", "c"])
      -Series.distinct(s)
      Series.n_distinct(s)

      And you can even get a dataframe showing the frequencies for each distinct value.

      Series.frequencies(s)

      +

      Explorer, like Polars, works up from the concept of a Series. In many ways, you can think of a dataframe as a row-aligned map of Series. These are like vectors in R or series in Pandas.

      For simplicity, Explorer uses the following Series dtypes:

      • :float - 64-bit floating point number
      • :integer - 64-bit signed integer
      • :boolean - Boolean
      • :string - UTF-8 encoded binary
      • :date - Date type that unwraps to Elixir.Date
      • :datetime - DateTime type that unwraps to Elixir.NaiveDateTime

      Series can be constructed from Elixir basic types. For example:

      s1 = Series.from_list([1, 2, 3])
      s2 = Series.from_list(["a", "b", "c"])
      s3 = Series.from_list([~D[2011-01-01], ~D[1965-01-21]])

      You'll notice that the dtype and size of the Series are at the top of the printed value. You can get those programmatically as well.

      Series.dtype(s3)
      Series.size(s3)

      And the printed values max out at 50:

      1..100 |> Enum.to_list() |> Series.from_list()

      Series are also nullable.

      s = Series.from_list([1.0, 2.0, nil, nil, 5.0])

      And you can fill in those missing values using one of the following strategies:

      • :forward - replace nil with the previous value
      • :backward - replace nil with the next value
      • :max - replace nil with the series maximum
      • :min - replace nil with the series minimum
      • :mean - replace nil with the series mean
      Series.fill_missing(s, :forward)

      In the case of mixed numeric types (i.e. integers and floats), Series will downcast to a float:

      Series.from_list([1, 2.0])

      In all other cases, Series must all be of the same dtype or else you'll get an ArgumentError.

      Series.from_list([1, 2, 3, "a"])

      One of the goals of Explorer is useful error messages. If you look at the error above, you get:

      Cannot make a series from mismatched types. Type of "a" does not match inferred dtype integer.

      Hopefully this makes abundantly clear what's going on.

      Series also implements the Access protocol. You can slice and dice in many ways:

      s = 1..10 |> Enum.to_list() |> Series.from_list()
      s[1]
      s[-1]
      s[0..4]
      s[[0, 4, 4]]

      And of course, you can convert back to an Elixir list.

      Series.to_list(s)

      Explorer supports comparisons.

      s = 1..11 |> Enum.to_list() |> Series.from_list()
      s1 = 11..1 |> Enum.to_list() |> Series.from_list()
      Series.equal(s, s1)
      Series.equal(s, 5)
      Series.not_equal(s, 10)
      Series.greater_equal(s, 4)

      And arithmetic.

      Series.add(s, s1)
      Series.subtract(s, 4)
      Series.multiply(s, s1)

      Remember those helpful errors? We've tried to add those throughout. So if you try to do arithmetic with mismatching dtypes:

      s = Series.from_list([1, 2, 3])
      +s1 = Series.from_list([1.0, 2.0, 3.0])
      +Series.add(s, s1)

      Just kidding! Integers and floats will downcast to floats. Let's try again:

      s = Series.from_list([1, 2, 3])
      +s1 = Series.from_list(["a", "b", "c"])
      +Series.add(s, s1)

      You can flip them around.

      s = Series.from_list([1, 2, 3, 4])
      +Series.reverse(s)

      And sort.

      1..100 |> Enum.to_list() |> Enum.shuffle() |> Series.from_list() |> Series.sort()

      Or argsort.

      s = 1..100 |> Enum.to_list() |> Enum.shuffle() |> Series.from_list()
      +ids = Series.argsort(s) |> Series.to_list()

      Which you can pass to Explorer.Series.slice/2 if you want the sorted values.

      Series.slice(s, ids)

      You can calculate cumulative values.

      s = 1..100 |> Enum.to_list() |> Series.from_list()
      +Series.cumulative_sum(s)

      Or rolling ones.

      Series.window_sum(s, 4)

      You can count and list unique values.

      s = Series.from_list(["a", "b", "b", "c", "c", "c"])
      +Series.distinct(s)
      Series.n_distinct(s)

      And you can even get a dataframe showing the frequencies for each distinct value.

      Series.frequencies(s)

      Working with DataFrames

      -

      A DataFrame is really just a collection of Series of the same size. Which is why you can create a DataFrame from a Keyword list.

      DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])

      Similarly to Series, the Inspect implementation prints some info at the top and to the left. At the top we see the shape of the dataframe (rows and columns) and then for each column we see the name, dtype, and first five values. We can see a bit more from that built-in dataset we loaded in earlier.

      df

      You will also see grouping information there, but we'll get to that later. You can get the info yourself directly:

      DataFrame.names(df)
      DataFrame.dtypes(df)
      DataFrame.shape(df)
      {DataFrame.n_rows(df), DataFrame.n_columns(df)}

      We can grab the head.

      DataFrame.head(df)

      Or the tail. Let's get a few more values from the tail.

      DataFrame.tail(df, 10)

      +

      A DataFrame is really just a collection of Series of the same size. Which is why you can create a DataFrame from a Keyword list.

      DataFrame.new(a: [1, 2, 3], b: ["a", "b", "c"])

      Similarly to Series, the Inspect implementation prints some info at the top and to the left. At the top we see the shape of the dataframe (rows and columns) and then for each column we see the name, dtype, and first five values. We can see a bit more from that built-in dataset we loaded in earlier.

      df

      You will also see grouping information there, but we'll get to that later. You can get the info yourself directly:

      DataFrame.names(df)
      DataFrame.dtypes(df)
      DataFrame.shape(df)
      {DataFrame.n_rows(df), DataFrame.n_columns(df)}

      We can grab the head.

      DataFrame.head(df)

      Or the tail. Let's get a few more values from the tail.

      DataFrame.tail(df, 10)

      Verbs and macros @@ -168,103 +168,103 @@

      Select

      -

      Let's jump right into it. We can select columns pretty simply.

      DF.select(df, ["year", "country"])

      But Elixir gives us some superpowers. In R there's tidy-select. I don't think we need that in Elixir. Anywhere in Explorer where you need to pass a list of column names, you can also execute a filtering callback on the column names. It's just an anonymous function passed to df |> DataFrame.names() |> Enum.filter(callback_here).

      DF.select(df, &String.ends_with?(&1, "fuel"))

      Want all but some columns? discard/2 performs the opposite of select/2.

      DF.discard(df, &String.ends_with?(&1, "fuel"))

      +

      Let's jump right into it. We can select columns pretty simply.

      DF.select(df, ["year", "country"])

      But Elixir gives us some superpowers. In R there's tidy-select. I don't think we need that in Elixir. Anywhere in Explorer where you need to pass a list of column names, you can also execute a filtering callback on the column names. It's just an anonymous function passed to df |> DataFrame.names() |> Enum.filter(callback_here).

      DF.select(df, &String.ends_with?(&1, "fuel"))

      Want all but some columns? discard/2 performs the opposite of select/2.

      DF.discard(df, &String.ends_with?(&1, "fuel"))

      Filter

      The next verb we'll look at is filter.

      This is implemented using a macro, so it's possible to use expressions -like you would if comparing variables in Elixir:

      DF.filter(df, country == "BRAZIL")

      Using complex filters is also possible:

      DF.filter(df, country == "ALGERIA" and year > 2012)

      You can also write the same filter without the macro, by using the callback version function which is filter_with/2:

      DF.filter_with(df, fn ldf ->
      -  ldf["country"]
      -  |> Series.equal("ALGERIA")
      -  |> Series.and(Series.greater(ldf["year"], 2012))
      -end)

      By the way, all the Explorer.DataFrame macros have a correspondent function that accepts a callback. +like you would if comparing variables in Elixir:

      DF.filter(df, country == "BRAZIL")

      Using complex filters is also possible:

      DF.filter(df, country == "ALGERIA" and year > 2012)

      You can also write the same filter without the macro, by using the callback version function which is filter_with/2:

      DF.filter_with(df, fn ldf ->
      +  ldf["country"]
      +  |> Series.equal("ALGERIA")
      +  |> Series.and(Series.greater(ldf["year"], 2012))
      +end)

      By the way, all the Explorer.DataFrame macros have a correspondent function that accepts a callback. In fact, our macros are implemented using those functions.

      The filter_with/2 function is going to use a virtual representation of the dataframe that we call a "lazy frame". With lazy frames you canĀ“t access the -series contents, but every operation will be optimized and run only once.

      Remember those helpful error messages?

      DF.filter(df, cuontry == "BRAZIL")

      +series contents, but every operation will be optimized and run only once.

      Remember those helpful error messages?

      DF.filter(df, cuontry == "BRAZIL")

      Mutate

      -

      A common task in data analysis is to add columns or change existing ones. Mutate is a handy verb.

      DF.mutate(df, new_column: solid_fuel + cement)

      Did you catch that? You can pass in new columns as keyword arguments. It also works to transform existing columns.

      DF.mutate(df,
      -  gas_fuel: Series.cast(gas_fuel, :float),
      +

      A common task in data analysis is to add columns or change existing ones. Mutate is a handy verb.

      DF.mutate(df, new_column: solid_fuel + cement)

      Did you catch that? You can pass in new columns as keyword arguments. It also works to transform existing columns.

      DF.mutate(df,
      +  gas_fuel: Series.cast(gas_fuel, :float),
         gas_and_liquid_fuel: gas_fuel + liquid_fuel
      -)

      DataFrame.mutate/2 is flexible though. You may not always want to use keyword arguments. Given that column names are String.t(), it may make more sense to use a map.

      DF.mutate(df, %{"gas_fuel" => gas_fuel - 10})

      DF.transmute/2, which is DF.mutate/2 that only retains the specified columns, is forthcoming.

      +)

      DataFrame.mutate/2 is flexible though. You may not always want to use keyword arguments. Given that column names are String.t(), it may make more sense to use a map.

      DF.mutate(df, %{"gas_fuel" => gas_fuel - 10})

      DF.transmute/2, which is DF.mutate/2 that only retains the specified columns, is forthcoming.

      Arrange

      -

      Sorting the dataframe is pretty straightforward.

      DF.arrange(df, year)

      But it comes with some tricks up its sleeve.

      DF.arrange(df, asc: total, desc: year)

      As the examples show, arrange/2 is a macro, and therefore you can use some functions to arrange your dataframe:

      DF.arrange(df, asc: Series.window_sum(total, 2))

      Sort operations happen left to right. And keyword list args permit specifying the direction.

      +

      Sorting the dataframe is pretty straightforward.

      DF.arrange(df, year)

      But it comes with some tricks up its sleeve.

      DF.arrange(df, asc: total, desc: year)

      As the examples show, arrange/2 is a macro, and therefore you can use some functions to arrange your dataframe:

      DF.arrange(df, asc: Series.window_sum(total, 2))

      Sort operations happen left to right. And keyword list args permit specifying the direction.

      Distinct

      -

      Okay, as expected here too. Very straightforward.

      DF.distinct(df, ["year", "country"])

      You can specify whether to keep the other columns as well, so the first row of each distinct value is kept:

      DF.distinct(df, ["country"], keep_all: true)

      +

      Okay, as expected here too. Very straightforward.

      DF.distinct(df, ["year", "country"])

      You can specify whether to keep the other columns as well, so the first row of each distinct value is kept:

      DF.distinct(df, ["country"], keep_all: true)

      Rename

      -

      Rename can take either a list of new names or a callback that is passed to Enum.map/2 against the names. You can also use a map or keyword args to rename specific columns.

      DF.rename(df, year: "year_test")
      DF.rename_with(df, &(&1 <> "_test"))

      +

      Rename can take either a list of new names or a callback that is passed to Enum.map/2 against the names. You can also use a map or keyword args to rename specific columns.

      DF.rename(df, year: "year_test")
      DF.rename_with(df, &(&1 <> "_test"))

      Dummies

      -

      This is fun! We can get dummy variables for unique values.

      DF.dummies(df, ["year"])
      DF.dummies(df, ["country"])

      +

      This is fun! We can get dummy variables for unique values.

      DF.dummies(df, ["year"])
      DF.dummies(df, ["country"])

      Sampling

      -

      Random samples can give us a percent or a specific number of samples, with or without replacement, and the function is seedable.

      DF.sample(df, 10)
      DF.sample(df, 0.4)

      Trying for those helpful error messages again.

      DF.sample(df, 10000)
      DF.sample(df, 10000, replacement: true)

      +

      Random samples can give us a percent or a specific number of samples, with or without replacement, and the function is seedable.

      DF.sample(df, 10)
      DF.sample(df, 0.4)

      Trying for those helpful error messages again.

      DF.sample(df, 10000)
      DF.sample(df, 10000, replacement: true)

      Pull and slice

      -

      Slicing and dicing can be done with the Access protocol or with explicit pull/slice/take functions.

      df["year"]
      DF.pull(df, "year")
      df[["year", "country"]]
      DF.slice(df, [1, 20, 50])

      Negative offsets work for slice!

      DF.slice(df, -10, 5)
      DF.slice(df, 10, 5)

      Slice also works with ranges:

      DF.slice(df, 12..42)

      +

      Slicing and dicing can be done with the Access protocol or with explicit pull/slice/take functions.

      df["year"]
      DF.pull(df, "year")
      df[["year", "country"]]
      DF.slice(df, [1, 20, 50])

      Negative offsets work for slice!

      DF.slice(df, -10, 5)
      DF.slice(df, 10, 5)

      Slice also works with ranges:

      DF.slice(df, 12..42)

      Pivot

      -

      We can pivot_longer/3 and pivot_wider/4. These are inspired by tidyr.

      There are some shortcomings in pivot_wider/4 related to polars. The select option must select only columns of numeric type.

      DF.pivot_longer(df, ["year", "country"], select: &String.ends_with?(&1, "fuel"))
      DF.pivot_wider(df, "country", "total", id_columns: ["year"])

      Let's make those names look nicer!

      tidy_names = fn name ->
      +

      We can pivot_longer/3 and pivot_wider/4. These are inspired by tidyr.

      There are some shortcomings in pivot_wider/4 related to polars. The select option must select only columns of numeric type.

      DF.pivot_longer(df, ["year", "country"], select: &String.ends_with?(&1, "fuel"))
      DF.pivot_wider(df, "country", "total", id_columns: ["year"])

      Let's make those names look nicer!

      tidy_names = fn name ->
         name
      -  |> String.downcase()
      -  |> String.replace(~r/\s/, " ")
      -  |> String.replace(~r/[^A-Za-z\s]/, "")
      -  |> String.replace(" ", "_")
      -end
      +  |> String.downcase()
      +  |> String.replace(~r/\s/, " ")
      +  |> String.replace(~r/[^A-Za-z\s]/, "")
      +  |> String.replace(" ", "_")
      +end
       
       df
      -|> DF.pivot_wider("country", "total", id_columns: ["year"])
      -|> DF.rename_with(tidy_names)

      +|> DF.pivot_wider("country", "total", id_columns: ["year"]) +|> DF.rename_with(tidy_names)

      Joins

      -

      Joining is fast and easy. You can specify the columns to join on and how to join. Polars even supports cartesian (cross) joins, so Explorer does too.

      df1 = DF.select(df, ["year", "country", "total"])
      -df2 = DF.select(df, ["year", "country", "cement"])
      +

      Joining is fast and easy. You can specify the columns to join on and how to join. Polars even supports cartesian (cross) joins, so Explorer does too.

      df1 = DF.select(df, ["year", "country", "total"])
      +df2 = DF.select(df, ["year", "country", "cement"])
       
      -DF.join(df1, df2)
      df3 = df |> DF.select(["year", "cement"]) |> DF.slice(0, 500)
      +DF.join(df1, df2)
      df3 = df |> DF.select(["year", "cement"]) |> DF.slice(0, 500)
       
      -DF.join(df1, df3, how: :left)

      +DF.join(df1, df3, how: :left)

      Grouping

      -

      Explorer supports groupby operations. They're limited based on what's possible in Polars, but they do most of what you need to do.

      grouped = DF.group_by(df, ["country"])

      Notice that the Inspect call now shows groups as well as rows and columns. You can, of course, get them explicitly.

      DF.groups(grouped)

      And you can ungroup explicitly.

      DF.ungroup(grouped)

      But what we care about the most is aggregating! Let's see which country has the max per_capita value.

      grouped
      -|> DF.summarise(max_per_capita: max(per_capita))
      -|> DF.arrange(desc: max_per_capita)

      Qatar it is.

      You may noticed that we are using max/1 inside the summarise macro. This is possible because we expose all functions from the Series module. You can use the following aggregations inside summarise:

      The API is similar to mutate: you can use keyword args or a map and specify aggregations to use.

      DF.summarise(grouped, min_per_capita: min(per_capita), min_total: min(total))

      Speaking of mutate, it's 'group-aware'. As are arrange, distinct, and n_rows.

      DF.mutate(grouped, total_window_sum: window_sum(total, 3), rows_in_group: count(country))

      It's also possible to use aggregations inside other functions:

      grouped
      -|> DF.summarise(greater_than_9: greater(max(per_capita), 9.0), per_capita_max: max(per_capita))
      -|> DataFrame.arrange(desc: per_capita_max)

      +

      Explorer supports groupby operations. They're limited based on what's possible in Polars, but they do most of what you need to do.

      grouped = DF.group_by(df, ["country"])

      Notice that the Inspect call now shows groups as well as rows and columns. You can, of course, get them explicitly.

      DF.groups(grouped)

      And you can ungroup explicitly.

      DF.ungroup(grouped)

      But what we care about the most is aggregating! Let's see which country has the max per_capita value.

      grouped
      +|> DF.summarise(max_per_capita: max(per_capita))
      +|> DF.arrange(desc: max_per_capita)

      Qatar it is.

      You may noticed that we are using max/1 inside the summarise macro. This is possible because we expose all functions from the Series module. You can use the following aggregations inside summarise:

      The API is similar to mutate: you can use keyword args or a map and specify aggregations to use.

      DF.summarise(grouped, min_per_capita: min(per_capita), min_total: min(total))

      Speaking of mutate, it's 'group-aware'. As are arrange, distinct, and n_rows.

      DF.mutate(grouped, total_window_sum: window_sum(total, 3), rows_in_group: count(country))

      It's also possible to use aggregations inside other functions:

      grouped
      +|> DF.summarise(greater_than_9: greater(max(per_capita), 9.0), per_capita_max: max(per_capita))
      +|> DataFrame.arrange(desc: per_capita_max)

      That's it!