From 9f98a90fa1fe06f31de8bcdfb7893dd78667dc17 Mon Sep 17 00:00:00 2001 From: philss Date: Thu, 27 Jul 2023 16:10:46 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20elixir-e?= =?UTF-8?q?xplorer/explorer@9b0b792aea47107535cb6c1a7c7047d6ffde5c28=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 | 3068 ++++++++++++++++++------------------- Explorer.TensorFrame.html | 80 +- Explorer.epub | Bin 406553 -> 406502 bytes Explorer.html | 54 +- changelog.html | 18 +- exploring_explorer.html | 100 +- 10 files changed, 3312 insertions(+), 3312 deletions(-) diff --git a/Explorer.Backend.html b/Explorer.Backend.html index b349f19ef..7798bf8fc 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 2cbea44f7..5db57a4ad 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 35715eaf0..bec5b508d 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 2f80b6674..7dd47bb13 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 088b7d9ff..f4e631562 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"]
+>
@@ -1754,36 +1754,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]
+>
@@ -1827,70 +1827,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
@@ -1933,40 +1933,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]
+>
@@ -2002,28 +2002,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.

@@ -2058,13 +2058,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>>
@@ -2101,9 +2101,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]
@@ -2142,27 +2142,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>>]
@@ -2199,9 +2199,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]
@@ -2245,19 +2245,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] +>
@@ -2309,28 +2309,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]
@@ -2371,28 +2371,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]
@@ -2437,9 +2437,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
@@ -2471,8 +2471,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
@@ -2513,9 +2513,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
@@ -2556,14 +2556,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]"]
+>
@@ -2591,13 +2591,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]
+>
@@ -2638,28 +2638,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]
@@ -2700,16 +2700,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]
@@ -2750,16 +2750,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]
@@ -2801,28 +2801,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]
@@ -2851,8 +2851,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
@@ -2881,8 +2881,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
@@ -2923,12 +2923,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]
@@ -2970,14 +2970,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]"]
+>
@@ -3017,28 +3017,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]
@@ -3083,24 +3083,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]
@@ -3141,16 +3141,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]
@@ -3191,20 +3191,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]
@@ -3245,16 +3245,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]
@@ -3308,29 +3308,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]
@@ -3373,25 +3373,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] +>
@@ -3419,19 +3419,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
@@ -3461,14 +3461,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]
+>
@@ -3502,62 +3502,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]
+>
@@ -3591,32 +3591,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]
+>
@@ -3657,19 +3657,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] +>
@@ -3703,14 +3703,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]
+>
@@ -3744,17 +3744,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
@@ -3797,35 +3797,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]
+>
@@ -3866,51 +3866,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
@@ -3984,13 +3984,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]
+>
@@ -4035,13 +4035,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]
+>
@@ -4069,21 +4069,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] +>
@@ -4117,12 +4117,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]
+>
@@ -4156,12 +4156,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]
+>
@@ -4206,13 +4206,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]
+>
@@ -4257,13 +4257,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]
+>
@@ -4304,12 +4304,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]
+>
@@ -4349,12 +4349,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]
+>
@@ -4388,13 +4388,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]
+>
@@ -4436,20 +4436,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] +>
@@ -4477,12 +4477,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]
+>
@@ -4523,51 +4523,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
@@ -4597,14 +4597,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]
+>
@@ -4646,19 +4646,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] +>
@@ -4700,40 +4700,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]
+>
@@ -4775,28 +4775,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] +>
@@ -4838,48 +4838,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]
+>
@@ -4921,28 +4921,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] +>
@@ -5012,12 +5012,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]
+>
@@ -5052,12 +5052,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]
+>
@@ -5099,25 +5099,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] +>
@@ -5149,19 +5149,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] +>
@@ -5207,17 +5207,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]
+>
@@ -5251,12 +5251,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]
+>
@@ -5290,12 +5290,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]
+>
@@ -5329,17 +5329,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]
+>
@@ -5373,12 +5373,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]
+>
@@ -5412,17 +5412,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]
+>
@@ -5475,12 +5475,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]
+>
@@ -5521,12 +5521,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]
+>
@@ -5567,12 +5567,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]
+>
@@ -5606,12 +5606,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]
+>
@@ -5652,13 +5652,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]
+>
@@ -5692,12 +5692,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]
+>
@@ -5731,14 +5731,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]
+>
@@ -5772,14 +5772,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]
+>
@@ -5813,14 +5813,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]
+>
@@ -5854,12 +5854,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]
+>
@@ -5900,13 +5900,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]
+>
@@ -5947,13 +5947,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]
+>
@@ -5999,12 +5999,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]
+>
@@ -6038,12 +6038,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"]
+>
@@ -6077,12 +6077,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"]
+>
@@ -6117,19 +6117,19 @@

trim(series, string)

Examples -
iex> s = Explorer.Series.from_list(["abc", "adefa", "bcda"])
-iex> Explorer.Series.trim(s, "a")
-#Explorer.Series<
-  Polars[3]
-  string ["bc", "def", "bcd"]
->
+
iex> s = Explorer.Series.from_list(["abc", "adefa", "bcda"])
+iex> Explorer.Series.trim(s, "a")
+#Explorer.Series<
+  Polars[3]
+  string ["bc", "def", "bcd"]
+>
 
-iex> s = Explorer.Series.from_list(["Ā£123", "1.00Ā£", "Ā£1.00Ā£"])
-iex> Explorer.Series.trim(s, "Ā£")
-#Explorer.Series<
-  Polars[3]
-  string ["123", "1.00", "1.00"]
->
+
iex> s = Explorer.Series.from_list(["Ā£123", "1.00Ā£", "Ā£1.00Ā£"]) +iex> Explorer.Series.trim(s, "Ā£") +#Explorer.Series< + Polars[3] + string ["123", "1.00", "1.00"] +>
@@ -6163,12 +6163,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"]
+>
@@ -6202,12 +6202,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"]
+>
@@ -6241,12 +6241,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"]
+>
@@ -6293,19 +6293,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"] +>
@@ -6339,12 +6339,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
@@ -6380,31 +6380,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}
@@ -6438,8 +6438,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
@@ -6490,19 +6490,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] +>
@@ -6537,12 +6537,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
@@ -6577,17 +6577,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]
+>
@@ -6621,21 +6621,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] +>
@@ -6691,12 +6691,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]
+>
@@ -6730,8 +6730,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
@@ -6766,27 +6766,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
@@ -6823,12 +6823,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]
+>
@@ -6862,8 +6862,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
@@ -6892,12 +6892,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]
+>
@@ -6942,47 +6942,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]
+>
@@ -7016,19 +7016,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] +>
@@ -7071,12 +7071,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]
+>
@@ -7113,33 +7113,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 [] +>
@@ -7173,29 +7173,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]
+>
@@ -7233,19 +7233,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] +>
@@ -7281,12 +7281,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]
+>
@@ -7314,8 +7314,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)
@@ -7369,26 +7369,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] +>
@@ -7430,26 +7430,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] +>
@@ -7491,19 +7491,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] +>
@@ -7545,19 +7545,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] +>
@@ -7596,19 +7596,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] +>
@@ -7660,73 +7660,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]
+>
@@ -7764,19 +7764,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] +>
@@ -7814,26 +7814,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] +>
@@ -7871,19 +7871,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] +>
@@ -7921,19 +7921,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] +>
@@ -7971,19 +7971,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 6043782f9..573a5d9ee 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 ca61593c55ed7046d3223981a05739ce5ea92b1d..6e6e94620f5f89c194e7751ab2db691ae1a239ab 100644 GIT binary patch delta 263944 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�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 delta 263832 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 nU|WG%z9d_*%rOvTEmmx3yL8*D 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

`9JqIP>+Dcb9QBy> zO*I!AyU5V=>E*vulXnZ1lay*Kfr*hF$!O&#?-0?5O2M7O{T+X)HV-_G)-n#(I<^TZ zY~r2)g&)f;Olqh?WUzsnNL*8!hbTfw1hOA;v;zruL$D}>OsvC|{)_=qnt`(lG9StS zaa~NvIQ9|v7?q|{7BN;USjjKz&@1C2Hu@wwGSu=crEuc-X#H#zHOABGPO-khw*6C9 z$pU7iwp>pc!DN)Fg}8;xMv11x%p=Yh$gSq0uaU$g(mBo=yZIRjP`;Gsv^Lvr;*Gvr zzvy2aai%X_u|1WMLQt6}_hye{S26^Gi=hQF#%DhSQNBt&arZS-mzX0?+$B)!Hh)f? zULq5m(rxu>SBcN$7_e=ICKcsQ`QH2Y$Ibo1xYPM6T+;0t)2iFS6w+K_ecOkys# z%`i9x3@FvQyXEIIRJ+!YFjS-0jBQ+1xt0f2Rk?;`1J0Gt?c5)`T0gz>y{!SVup4WY z^~vuCEi^eopGZYf9SwGr&7FAJE(%qfw^-dDrcpOh-b8Ph0q!fmtM;3{DcbDrqY!WR z+NWJ>E)i~h+oo~NhJGAW&jnX;pXb1Kf;>GIznr<`@^DS^RCO#tIWBAjYkQ;U>@w#F1m{FP%*!mbTWm4*%2`tFD|rGw{UW_RA_J{X9d-$M&;mK!#V z5bxv=fx-k9RLeQiddMJQGS~WCDhV4yNGy_ zvU8bA3=kU|(2irQA11hBm{5^gAWNoM8uNsRDHz-_#Wps1T+kNNAe3bZm2;0dGa>#n ztZ*XkrybY$fvk?DHU*Sf3v)jrM;nY)nu<8 zL&~xw!;>{$DY)?7T^qRil4G-J<|llIRSMyhLH=7vI-Vc*a}^lAp8oC^U}ITV5kO6s zh0UhjpDeEoE2d%WO(vGKO5PRnUMqkjI~bpJq1n?%Cmdbf+sAGiV>9~#t^K_;GK3|8 zwot;3WS~13tvfYAZsYSJZl`=@`2w!;{gf?cCLufduU4!JMuk0uJc#vc2M( zzkX(E!>s$7&u$F%Rkz-~iJtI2`;Wgq@a>OZ;_bfltG&ybEq=4zQz`>gz-EzZ)_=>C5+-qF?6OB#B zrEFp(^4sd{ph1U~?VhJQogLgdpu6GmVV%eU1}xt}=HCl%U zW>r|2n>YKSJC4wmgOjkQ=%_*LEl2~xq#O_8;+nS42fkY^e8XgHX5DPaycIfEopl+g zog{t9n{zqd4jOguF3wwl#&teFaKTqZvCb?5O3$iFqUwWD!~5ydG}yP=3f6yaK%m09 zZ@7j;+5a@TU~XF$pq=M5c{}voy7NLWXGL2dgs_)DfgFXFrV0EkFbU!hmkBAzdq`17 zrD>|`;X_~ZT)PGxfX5@S;5KQ>VMipyBrbt2oSR0?ovpKAx-8)dW1nMIfBX4j41K`> zya7;VhVcG>WP(lva9(CfT^d||zRU0}(C^2xKl1bP_tc*#4Z|lP!wKY{fQDv2cB6FA zK_w)EQEG%EZ^2XQE6F`bzi?>s5xgs(RLRX|3qtKEdggJjX;8qy1x@G8)cZ;Pc0xql zj6Z>z`%b|fZNY8pQoByz_A9xZMLI|y2p~~$YB`lbn%l9FlhCETKHr9x`0sfE+n&c6Hc7cn!?( zTi94qa@zM?!y~n=jC;E2QRJ{#!`=st#j*nVlz@jC& ztkZ~+#2x5Vhzs-Ide`cGtu7r_={fq?&BJiQ{KRDBS~)GhCj6pIp^pU_5X+8BA9`|* zR{shD?*OF--dnyiWP4&nT-E-#eML;AyQ@WL!Po}-P{=$f#^j^`S-M3jmVA8^oBZ4p z+j@HI>!ONy$M|xj2}f2#$-)-`iw}(7UY@=&!)Dums0+XUZ)ruUwDngt>Cn|1)i`Ye zz0InG>v>n++9oU?y|g0gLRcb!1pUO&*72ocd1*~K876_zlm}}y!RNB=4!o!%aALv} z<_*xfiE}pxs|8UO+rcTEA5f}CUg(D=ZrTUj)lp+>FZm1z{rk;s1Q7bkVB?Ftu|IgT zpjBroi(iPp*q}jIBA8EjaCk=9LG3OXGIpvy?kZ|luFo6uh5eCqMq*e^DOTetZYO`W zQ74>4?v8haBlII~P2tUQCbZM{dLzHcLeWv#4Vsif+KL7JRmrcA`K0G#Hpp{M2(gNR z*cr?I;fssZJtsR338bb79uI|Fi7!y%&QbOdmi>*@2xotYdQNsm)32mfpi|mo_t+y} z_8pGvadOfLTuV7ZJy%<6mKSel;`U^#(+Cn@TDkXhm(ePoaLV+PCGvbHi2rAX5GOFU zp^q|ZuauWjDM|ZemL1&s#6&ZJEgkNBW#^g2k~NVBTi_YR1`II{2>-}Hoh_9xPto|U zow#!Ux~uTiN_>2$k(q+JxMGG-)qE=$PD?aLgELnSE>nGI=9QUr@{nxc#lLH6S!BE# z%*#np6rUP3QgppFd}ib2>sa)rgPih%2Fuxq+q|Ap*S%nPmMPO2Wv+9@JoVCdeALA+ zG2vu$<5uSA1+YjiKt?_droz14&Pb6nqFh>$RN6QOLR3kA}%wz8&f1kQyAt#M}w-;5) zE7L=zJXa6TcaXzwmnl_Bpir$gfi|jeWQaA2eX#He@e#m+$l}0y;{zgkePJC6iLt*U zmVb1M7#8|UJ{-1g(9whzp*jzc;@p=s2DgJKi+)cs|Ju>a{Uc=<8vK6+YhHk1DE&t|?v zfB!nOWtHYLem#U@PIYYvO)t2-;FmeiUn>hEXH{Vbk9Zt}g=}2fe=nuqADy>maXbgR z0*?_2X!x-eBL?|v#+w@1;&-c&1}dsv2!b?#L7EDCpj9$)2vNVBI`)RI(1vzGmM>L( zR5{|necfq*72%Z?JZT;LFOy5Nb&tzbn_v5&vW!=2ife!>wpHv777YnvEd;lUz=;Ds z-D086h0-75OdY|rR6JM&+vv_!#ISSk(NqNcBDgFh5G6k|w<%3<3$iv+YY9#sl%p1a zvV$sk3RiBaBq>Kv)7V{i(f97g5YFE2ZkE$(LqAk?Pr)aD{Q0oU{c!p;%Qw`{Uf!Ot zSDc=OT)~UMcE8*(=5hs(bMU59VcR>!)RcC^S3Q@I-Pd~LQ&>nwja%q5wK#eH9ka?E zuSq66tMbm$XV5C-yMBpOZB&&c+^ahvj<$~d3i`X0*uFl{EqL&HnIJm4IOt~CP)z~J zD;>SXW+Ba0bcL$AJc@F;=|r=KWMm@PA-A*<79k*aShOL0M3eF|29@J&F@~jpWdoxs z$TlT$svf-d&ZD7GJKg|w-d!=Qk0W&U%Rh%!wJF}t8ylW1_@ek7N@($qzX9g3!fIKW zxLFs7+=gsm2ku}CWJ@@epy_H4xJ~41NxFA!%S{GrgDdQxbz@8KHQH(wrp;>KoUta8 z3UMB+Orf>QAHRS-|M7ahHU@w=lJAo`?V?}|Xpx0folmJ~j>R1kp#*Hpu`~)6jiUs8 z-MXoJa+1>h9*^{F+j4;kbs2-$J7Ij@q1)m3cob{#4lk(^!XSIq{PRYi{4zpB@WNya)MC792k-lu=Ij&^L>>SyF)2-aRvm|L8dRqeYJvt_rz$c^prq6acuqP+9LymyJd5!=867=C}%cjw^Db4q-p_0ctdEpi0Z+0p4wSHCZ zA*7o~l}V|Wr>6dfX4qe5dP>K(BOP%ozxdi<0S74PK)^Vj#q*OY%UFSopHhG|>iMFG zn*jnNfSxLR3c!|R>qqtKFx<`x+rFhCOVS2GeFd=(Q|&KWk7sxD zKq=z7Q~DuBNHKp3ni1_or4-`0M9^4V@GRaZ&f*@MXvAO6Fl#_HfjVN73)1;N^|dPb zZs?oZ%1z~{O5LW<`VPV>cJMF%Qhi_%!eUEFEHz%Z@`9GCs8(307!UNMe1^52#SC zR<+=)9+X4b4E$E!J;N4q*PK53VQohJ`i3YM2v}>u_8vjjP{GDqOF|&;QBZrCItoz@%;w>B`q8rgEIj9T$N0Eg>P(Mmky|w zTSr?Dqchge9hO{BAh^FwZYOIGGM;YAW~HYr6x};9`6Cb5ztHFU{^|8PYvI;hFf=64 zK?tnp|KTy&xjpmtTBNXsuXzZ4MUV9b?oXx&e;(3d`0TUd`w#nVn7jjs+#5B*;pD1Oe z-J_18nVCsS*>VhQdg2w8C z$yNU3RsK~vAi?kSFYg0+hZStg(|@)q@0-~>#Q&;_f6oQ{`-JDXpcu?**a#!#zB8!V zO2q2%TFd4^lq^~Qd_zwE;O$ka--2cMAPjGuV1-rJ+H@*%Ipfsxx_P4)-s<>{xE3*n zce@F{4~H|i15GxjQ`H{Jd?GyBFBcwU<-vrDOODdosykbA9XCrxwXJxCr zN3AW98&%e1lNEbH1<%xG8i!ts{ZzC1^RRr`QV>~LrR{~NN6{I2nKO8qLw=dl+a*G4 z&2sF25c4uk^pGoZNka2P!MwG>-)bZ7t(|Q^g!&iArVVXNa(p*eN|ZNngy6Qv3nRt*}%p_NFlPkM>g;}E6QRF6

T#xT!@#iosJB* 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

dO}Mb+$&E34$4;o?mtC@z;gXeK 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�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�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 diff --git a/Explorer.html b/Explorer.html index 0f309e7b1..fed8b5c1f 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 7a04c7b7a..7be29b0bb 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 aa00db8b9..12860d8d1 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!