Filter Data pada DataFrame Polars

Filter Data pada DataFrame Polars

Dalam tahapan preprocessing data ataupun untuk alasan analisis, seringkali dilakukan proses filter data-data sesuai kebutuhan. Tutorial ini kita akan membahas teknik-teknik untuk memfilter data menggunakan pustaka polars. Adapun versi polars yang kita gunakan adalah versi 0.18.0.

Python

# pip install polars

import polars as pl

print(pl.__version__)

# 0.18.0

Penyiapan Data

Data yang kita gunakan adalah data sintetis atau buatan yang berisi informasi mengenai transaksi suatu retail. Format data yang digunakan adalah file parquet. Silahkan klik di sini untuk mengunduhnya.

Python

import polars as pl

# Membaca data (format parquet)
data = pl.read_parquet("retail_transaction.parquet")

# Menampilkan informasi data
# Menampilkan jumlah baris dan kolom
print(data.shape)

# Menampilkan tipe data kolom
print(data.dtypes)

# Menampilkan ringkasan statistik
print(data.describe())

Output

(75620, 8)

[Datetime(time_unit='ns', time_zone=None), Utf8, Utf8, Utf8, Int64, Utf8, Float64, Float64]

shape: (9, 9)
┌────────────┬───────────┬───────────┬───────────┬───┬───────────┬────────┬────────────┬───────────┐
│ describe   ┆ tr_date   ┆ state     ┆ city      ┆ … ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---        ┆ ---       ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ str        ┆ str       ┆ str       ┆ str       ┆   ┆ f64       ┆ str    ┆ ---        ┆ f64       │
│            ┆           ┆           ┆           ┆   ┆           ┆        ┆ f64        ┆           │
╞════════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪════════╪════════════╪═══════════╡
│ count      ┆ 75620     ┆ 75620     ┆ 75620     ┆ … ┆ 75620.0   ┆ 75620  ┆ 75620.0    ┆ 75620.0   │
│ null_count ┆ 0         ┆ 0         ┆ 0         ┆ … ┆ 0.0       ┆ 54678  ┆ 54678.0    ┆ 0.0       │
│ mean       ┆ null      ┆ null      ┆ null      ┆ … ┆ 18.455104 ┆ null   ┆ 0.298487   ┆ 127.70132 │
│            ┆           ┆           ┆           ┆   ┆           ┆        ┆            ┆ 4         │
│ std        ┆ null      ┆ null      ┆ null      ┆ … ┆ 9.20133   ┆ null   ┆ 0.115625   ┆ 62.798827 │
│ min        ┆ 2019-10-0 ┆ Alabama   ┆ Aiken     ┆ … ┆ 3.0       ┆ Yes    ┆ 0.1        ┆ 19.0      │
│            ┆ 1         ┆           ┆           ┆   ┆           ┆        ┆            ┆           │
│            ┆ 00:00:00  ┆           ┆           ┆   ┆           ┆        ┆            ┆           │
│ max        ┆ 2020-10-3 ┆ South     ┆ Zephyrhil ┆ … ┆ 34.0      ┆ Yes    ┆ 0.5        ┆ 236.0     │
│            ┆ 0         ┆ Carolina  ┆ ls        ┆   ┆           ┆        ┆            ┆           │
│            ┆ 00:00:00  ┆           ┆           ┆   ┆           ┆        ┆            ┆           │
│ median     ┆ null      ┆ null      ┆ null      ┆ … ┆ 18.0      ┆ null   ┆ 0.3        ┆ 127.7     │
│ 25%        ┆ null      ┆ null      ┆ null      ┆ … ┆ 10.0      ┆ null   ┆ 0.2        ┆ 73.2      │
│ 75%        ┆ null      ┆ null      ┆ null      ┆ … ┆ 26.0      ┆ null   ┆ 0.4        ┆ 182.11    │
└────────────┴───────────┴───────────┴───────────┴───┴───────────┴────────┴────────────┴───────────┘

Filter Null, NaN, None

Nilai None atau null dapat difilter menggunakan fungsi is_null. Sementara untuk nilai nan pada kolom numerik dapat difilter menggunakan fungsi is_nan.

Contoh 1 – Filter data dengan kolom membership_id bernilai null:

Python

# Menggunakan fungsi is_null
print(data.filter(pl.col("membership_id").is_null()))

Output

shape: (31_697, 8)
┌─────────────┬────────────┬────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date     ┆ state      ┆ city       ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---         ┆ ---        ┆ ---        ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns ┆ str        ┆ str        ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│ ]           ┆            ┆            ┆ str        ┆           ┆        ┆ f64        ┆           │
╞═════════════╪════════════╪════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-05-15  ┆ South      ┆ Greenville ┆ null       ┆ 13        ┆ Yes    ┆ 0.33       ┆ 155.59    │
│ 00:00:00    ┆ Carolina   ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-31  ┆ Florida    ┆ Pensacola  ┆ null       ┆ 8         ┆ null   ┆ null       ┆ 72.93     │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-02-16  ┆ Florida    ┆ Miami      ┆ null       ┆ 26        ┆ null   ┆ null       ┆ 104.69    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-07  ┆ Florida    ┆ Homestead  ┆ null       ┆ 18        ┆ null   ┆ null       ┆ 94.76     │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ …           ┆ …          ┆ …          ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2019-10-22  ┆ Florida    ┆ Orlando    ┆ null       ┆ 22        ┆ null   ┆ null       ┆ 114.95    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-07-17  ┆ Florida    ┆ Miami      ┆ null       ┆ 21        ┆ null   ┆ null       ┆ 198.88    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-10-16  ┆ Alabama    ┆ Birmingham ┆ null       ┆ 29        ┆ Yes    ┆ 0.13       ┆ 158.22    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-02  ┆ Georgia    ┆ Athens     ┆ null       ┆ 15        ┆ null   ┆ null       ┆ 179.96    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
└─────────────┴────────────┴────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Contoh 2 – Filter data dengan kolom discount_amt bernilai null :

Python

# menggunakan fungsi is_null
print(data.filter(pl.col("discount_amt").is_null()))

Output

shape: (54_678, 8)
┌───────────────┬─────────┬─────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date       ┆ state   ┆ city        ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---           ┆ ---     ┆ ---         ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns]  ┆ str     ┆ str         ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│               ┆         ┆             ┆ str        ┆           ┆        ┆ f64        ┆           │
╞═══════════════╪═════════╪═════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-06-24    ┆ Florida ┆ Miami       ┆ A23-472-61 ┆ 22        ┆ null   ┆ null       ┆ 213.68    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-02-20    ┆ Georgia ┆ Atlanta     ┆ R04-941-15 ┆ 22        ┆ null   ┆ null       ┆ 106.82    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-31    ┆ Florida ┆ Pensacola   ┆ null       ┆ 8         ┆ null   ┆ null       ┆ 72.93     │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-02-16    ┆ Florida ┆ Miami       ┆ null       ┆ 26        ┆ null   ┆ null       ┆ 104.69    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ …             ┆ …       ┆ …           ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2020-08-02    ┆ Florida ┆ Panama City ┆ P63-789-70 ┆ 16        ┆ null   ┆ null       ┆ 76.02     │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-11    ┆ Florida ┆ Panama City ┆ E79-788-42 ┆ 13        ┆ null   ┆ null       ┆ 104.27    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-08-21    ┆ Alabama ┆ Gadsden     ┆ E21-954-64 ┆ 14        ┆ null   ┆ null       ┆ 161.5     │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-02    ┆ Georgia ┆ Athens      ┆ null       ┆ 15        ┆ null   ┆ null       ┆ 179.96    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
└───────────────┴─────────┴─────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Filter Data Numerik

Filter pada data numerik dapat menggunakan operator perbandingan:

  • sama dengan : ==
  • tidak sama dengan : !=
  • lebih besar dari : >
  • lebih besar atau sama dengan : >=
  • lebih kecil dari : <
  • lebih kecil atau sama dengan : <=
  • ada di dalam list atau range: is_between, is_in
  • gabungan kondisi : (...) & (...) (harus semua benar), (...) | (...) (setidaknya 1 kondisi benar)
  • negasi : ~

Contoh 3 – Filter data dimana kolom order_amt lebih besar atau sama dengan $200:

Agar sintaks lebih mudah dibaca, kita dapat memisahkan filter atau statemen kondisi ke dalam variabel. Hal ini sangat bermanfaat pada saat jumlah kondisi yang digunakan semakin banyak.

Python

filter_1 = pl.col("order_amt") >= 200

# data.filter(filter_1)

print(data.filter(filter_1))

Output

shape: (12_753, 8)
┌──────────────┬─────────┬──────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date      ┆ state   ┆ city         ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---          ┆ ---     ┆ ---          ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns] ┆ str     ┆ str          ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│              ┆         ┆              ┆ str        ┆           ┆        ┆ f64        ┆           │
╞══════════════╪═════════╪══════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-06-24   ┆ Florida ┆ Miami        ┆ A23-472-61 ┆ 22        ┆ null   ┆ null       ┆ 213.68    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-10-01   ┆ Georgia ┆ Atlanta      ┆ null       ┆ 6         ┆ Yes    ┆ 0.36       ┆ 202.52    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-10-31   ┆ Florida ┆ West Palm    ┆ K73-446-05 ┆ 19        ┆ null   ┆ null       ┆ 208.82    │
│ 00:00:00     ┆         ┆ Beach        ┆            ┆           ┆        ┆            ┆           │
│ 2020-08-13   ┆ Georgia ┆ Gainesville  ┆ null       ┆ 31        ┆ null   ┆ null       ┆ 216.7     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ …            ┆ …       ┆ …            ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2020-02-03   ┆ Florida ┆ Lake Worth   ┆ null       ┆ 34        ┆ null   ┆ null       ┆ 220.64    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-10-10   ┆ Florida ┆ Orlando      ┆ Z52-600-31 ┆ 13        ┆ null   ┆ null       ┆ 232.22    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-08-18   ┆ Alabama ┆ Anniston     ┆ Q10-224-44 ┆ 24        ┆ null   ┆ null       ┆ 216.49    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-30   ┆ Florida ┆ Fort Pierce  ┆ G23-376-16 ┆ 12        ┆ null   ┆ null       ┆ 230.75    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
└──────────────┴─────────┴──────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Contoh 4 – Filter data dengan discount_amt sama dengan 0.2 dan order_amt lebih dari $100 :

Jika filter terdriri dari beberapa kondisi, maka setiap kondisi yang menggunakan operator perbandingan (==,!=, dst) harus dibungkus di dalam tanda kurung (kondisi 1) & (kondisi 2) | .... Kecuali untuk filter yang menggunakan fungsi (misal : is_nan, is_in, is_between) maka tanda kurung tidak diperlukan.

Python

filter_2 = (pl.col("discount_amt") == 0.2) & (pl.col("order_amt") < 50)

# data.filter(filter_2)

print(data.filter(filter_2))

Output

shape: (73, 8)
┌──────────────┬─────────┬──────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date      ┆ state   ┆ city         ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---          ┆ ---     ┆ ---          ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns] ┆ str     ┆ str          ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│              ┆         ┆              ┆ str        ┆           ┆        ┆ f64        ┆           │
╞══════════════╪═════════╪══════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2019-11-13   ┆ Florida ┆ Jacksonville ┆ null       ┆ 29        ┆ Yes    ┆ 0.2        ┆ 24.73     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-28   ┆ Georgia ┆ Atlanta      ┆ S26-460-55 ┆ 7         ┆ Yes    ┆ 0.2        ┆ 36.73     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-12-25   ┆ Georgia ┆ Atlanta      ┆ null       ┆ 29        ┆ Yes    ┆ 0.2        ┆ 24.76     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-11   ┆ Florida ┆ Gainesville  ┆ O52-218-69 ┆ 32        ┆ Yes    ┆ 0.2        ┆ 25.04     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ …            ┆ …       ┆ …            ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2020-05-14   ┆ Florida ┆ Pensacola    ┆ null       ┆ 7         ┆ Yes    ┆ 0.2        ┆ 46.67     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-31   ┆ Florida ┆ Melbourne    ┆ G71-142-05 ┆ 11        ┆ Yes    ┆ 0.2        ┆ 43.71     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-06-01   ┆ Florida ┆ Clearwater   ┆ null       ┆ 19        ┆ Yes    ┆ 0.2        ┆ 42.16     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-06-01   ┆ Florida ┆ Brooksville  ┆ C95-444-50 ┆ 26        ┆ Yes    ┆ 0.2        ┆ 45.33     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
└──────────────┴─────────┴──────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Contoh 5 – Filter nilai num_items antara 10-19 dan order_amt < $50 :

fungsi is_between memiliki parameter lower_bound sebagai batas bawah, upper_bound sebagai batas atas dan closed. Nilai yang mungkin untuk closed adalah "both", "left", "right" atau "none“. Pada contoh ini ktia menggunakan "both" yang berarti batas bawah = 10 dan batas atas = 19 termasuk dalam kriteria (inklusif).

Python

filter_3 = pl.col("num_items").is_between(10, 19, closed="both") & (pl.col("order_amt") < 50)

# data.filter(filter_3)

print(data.filter(filter_3))

Output

shape: (3_425, 8)
┌──────────────┬─────────┬──────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date      ┆ state   ┆ city         ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---          ┆ ---     ┆ ---          ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns] ┆ str     ┆ str          ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│              ┆         ┆              ┆ str        ┆           ┆        ┆ f64        ┆           │
╞══════════════╪═════════╪══════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-04-28   ┆ Florida ┆ Gainesville  ┆ Q80-771-31 ┆ 13        ┆ null   ┆ null       ┆ 45.35     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-13   ┆ Florida ┆ Saint        ┆ O45-092-88 ┆ 17        ┆ null   ┆ null       ┆ 24.27     │
│ 00:00:00     ┆         ┆ Augustine    ┆            ┆           ┆        ┆            ┆           │
│ 2019-10-27   ┆ Florida ┆ Hialeah      ┆ B70-879-96 ┆ 10        ┆ Yes    ┆ 0.19       ┆ 32.38     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-12-23   ┆ Florida ┆ West Palm    ┆ G74-909-31 ┆ 12        ┆ null   ┆ null       ┆ 22.6      │
│ 00:00:00     ┆         ┆ Beach        ┆            ┆           ┆        ┆            ┆           │
│ …            ┆ …       ┆ …            ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2020-06-28   ┆ Florida ┆ Fort         ┆ L86-855-25 ┆ 12        ┆ null   ┆ null       ┆ 43.0      │
│ 00:00:00     ┆         ┆ Lauderdale   ┆            ┆           ┆        ┆            ┆           │
│ 2020-10-10   ┆ Alabama ┆ Montgomery   ┆ null       ┆ 13        ┆ null   ┆ null       ┆ 25.74     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-09-10   ┆ Georgia ┆ Atlanta      ┆ I01-339-59 ┆ 16        ┆ null   ┆ null       ┆ 29.67     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-06-06   ┆ Florida ┆ West Palm    ┆ null       ┆ 11        ┆ null   ┆ null       ┆ 44.94     │
│ 00:00:00     ┆         ┆ Beach        ┆            ┆           ┆        ┆            ┆           │
└──────────────┴─────────┴──────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Contoh 6 – Filter nilai num_items bukan [3, 5 atau 7] dan order_amt > $100 :

Python

filter_4 = ~pl.col("num_items").is_in([3, 5, 7]) & (pl.col("order_amt") > 100)

# data.filter(filter_4)

print(data.filter(filter_4))

Output

shape: (42_958, 8)
┌─────────────┬────────────┬────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date     ┆ state      ┆ city       ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---         ┆ ---        ┆ ---        ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns ┆ str        ┆ str        ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│ ]           ┆            ┆            ┆ str        ┆           ┆        ┆ f64        ┆           │
╞═════════════╪════════════╪════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-06-24  ┆ Florida    ┆ Miami      ┆ A23-472-61 ┆ 22        ┆ null   ┆ null       ┆ 213.68    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-05-15  ┆ South      ┆ Greenville ┆ null       ┆ 13        ┆ Yes    ┆ 0.33       ┆ 155.59    │
│ 00:00:00    ┆ Carolina   ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-02-20  ┆ Georgia    ┆ Atlanta    ┆ R04-941-15 ┆ 22        ┆ null   ┆ null       ┆ 106.82    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-07-22  ┆ Florida    ┆ Sarasota   ┆ U46-940-80 ┆ 17        ┆ Yes    ┆ 0.25       ┆ 169.14    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ …           ┆ …          ┆ …          ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2019-11-30  ┆ Florida    ┆ Fort       ┆ G23-376-16 ┆ 12        ┆ null   ┆ null       ┆ 230.75    │
│ 00:00:00    ┆            ┆ Pierce     ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-11  ┆ Florida    ┆ Panama     ┆ E79-788-42 ┆ 13        ┆ null   ┆ null       ┆ 104.27    │
│ 00:00:00    ┆            ┆ City       ┆            ┆           ┆        ┆            ┆           │
│ 2020-08-21  ┆ Alabama    ┆ Gadsden    ┆ E21-954-64 ┆ 14        ┆ null   ┆ null       ┆ 161.5     │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-02  ┆ Georgia    ┆ Athens     ┆ null       ┆ 15        ┆ null   ┆ null       ┆ 179.96    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
└─────────────┴────────────┴────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Filter Data Text dan Objek

Untuk data yang berisi text atau objek dapat dibuat filter menggunakan operator serta fungsi berikut:

  • sama dengan :==
  • tidak sama dengan : !=
  • diawali dengan : str.starts_with
  • diakhiri dengan : str.ends_with
  • mengandung text : str.contains
  • ada di dalam list : isin
  • negasi : ~
  • regex : str.contains (regex=True)

Contoh 7 – Filter kolom state=Florida" :

Python

filter_5 = pl.col("state") == "Florida"

# data.filter(filter_5)

print(data.filter(filter_5))

Output

shape: (41_928, 8)
┌───────────────┬─────────┬─────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date       ┆ state   ┆ city        ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---           ┆ ---     ┆ ---         ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns]  ┆ str     ┆ str         ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│               ┆         ┆             ┆ str        ┆           ┆        ┆ f64        ┆           │
╞═══════════════╪═════════╪═════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-06-24    ┆ Florida ┆ Miami       ┆ A23-472-61 ┆ 22        ┆ null   ┆ null       ┆ 213.68    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-07-22    ┆ Florida ┆ Sarasota    ┆ U46-940-80 ┆ 17        ┆ Yes    ┆ 0.25       ┆ 169.14    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-31    ┆ Florida ┆ Pensacola   ┆ null       ┆ 8         ┆ null   ┆ null       ┆ 72.93     │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-02-16    ┆ Florida ┆ Miami       ┆ null       ┆ 26        ┆ null   ┆ null       ┆ 104.69    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ …             ┆ …       ┆ …           ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2020-07-17    ┆ Florida ┆ Miami       ┆ null       ┆ 21        ┆ null   ┆ null       ┆ 198.88    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-30    ┆ Florida ┆ Fort Pierce ┆ G23-376-16 ┆ 12        ┆ null   ┆ null       ┆ 230.75    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-08-02    ┆ Florida ┆ Panama City ┆ P63-789-70 ┆ 16        ┆ null   ┆ null       ┆ 76.02     │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-11    ┆ Florida ┆ Panama City ┆ E79-788-42 ┆ 13        ┆ null   ┆ null       ┆ 104.27    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
└───────────────┴─────────┴─────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Contoh 8 – Filter kolom state adalah "Florida" dan city bukan "Miami" :

Python

filter_6 = (data["state"] == "Florida") & (data["city"] != "Miami")

# data[filter_6]

print(data[filter_6].to_string(max_rows=10))

Output

shape: (36_744, 8)
┌──────────────┬─────────┬──────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date      ┆ state   ┆ city         ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---          ┆ ---     ┆ ---          ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns] ┆ str     ┆ str          ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│              ┆         ┆              ┆ str        ┆           ┆        ┆ f64        ┆           │
╞══════════════╪═════════╪══════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-07-22   ┆ Florida ┆ Sarasota     ┆ U46-940-80 ┆ 17        ┆ Yes    ┆ 0.25       ┆ 169.14    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-31   ┆ Florida ┆ Pensacola    ┆ null       ┆ 8         ┆ null   ┆ null       ┆ 72.93     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-04-24   ┆ Florida ┆ Daytona      ┆ O68-957-14 ┆ 6         ┆ null   ┆ null       ┆ 23.5      │
│ 00:00:00     ┆         ┆ Beach        ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-07   ┆ Florida ┆ Homestead    ┆ null       ┆ 18        ┆ null   ┆ null       ┆ 94.76     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ …            ┆ …       ┆ …            ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2019-10-22   ┆ Florida ┆ Orlando      ┆ null       ┆ 22        ┆ null   ┆ null       ┆ 114.95    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-30   ┆ Florida ┆ Fort Pierce  ┆ G23-376-16 ┆ 12        ┆ null   ┆ null       ┆ 230.75    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-08-02   ┆ Florida ┆ Panama City  ┆ P63-789-70 ┆ 16        ┆ null   ┆ null       ┆ 76.02     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-11   ┆ Florida ┆ Panama City  ┆ E79-788-42 ┆ 13        ┆ null   ┆ null       ┆ 104.27    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
└──────────────┴─────────┴──────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Contoh 9 – Filter kolom city diawali kata "Fort" :

Python

filter_7 = pl.col("city").str.starts_with("Fort")

# data.filter(filter_7)

print(data.filter(filter_7))

Output

shape: (3_785, 8)
┌──────────────┬─────────┬──────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date      ┆ state   ┆ city         ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---          ┆ ---     ┆ ---          ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns] ┆ str     ┆ str          ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│              ┆         ┆              ┆ str        ┆           ┆        ┆ f64        ┆           │
╞══════════════╪═════════╪══════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-02-07   ┆ Florida ┆ Fort         ┆ A23-124-53 ┆ 7         ┆ Yes    ┆ 0.42       ┆ 172.93    │
│ 00:00:00     ┆         ┆ Lauderdale   ┆            ┆           ┆        ┆            ┆           │
│ 2019-10-11   ┆ Florida ┆ Fort         ┆ O72-081-20 ┆ 29        ┆ null   ┆ null       ┆ 187.34    │
│ 00:00:00     ┆         ┆ Lauderdale   ┆            ┆           ┆        ┆            ┆           │
│ 2019-10-25   ┆ Florida ┆ Fort Pierce  ┆ J63-913-89 ┆ 24        ┆ null   ┆ null       ┆ 93.12     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-07-06   ┆ Florida ┆ Fort Myers   ┆ B45-088-52 ┆ 5         ┆ null   ┆ null       ┆ 216.23    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ …            ┆ …       ┆ …            ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2020-02-12   ┆ Florida ┆ Fort         ┆ null       ┆ 6         ┆ null   ┆ null       ┆ 212.13    │
│ 00:00:00     ┆         ┆ Lauderdale   ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-07   ┆ Florida ┆ Fort         ┆ F20-296-85 ┆ 16        ┆ null   ┆ null       ┆ 124.53    │
│ 00:00:00     ┆         ┆ Lauderdale   ┆            ┆           ┆        ┆            ┆           │
│ 2020-03-10   ┆ Florida ┆ Fort         ┆ null       ┆ 28        ┆ null   ┆ null       ┆ 86.91     │
│ 00:00:00     ┆         ┆ Lauderdale   ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-30   ┆ Florida ┆ Fort Pierce  ┆ G23-376-16 ┆ 12        ┆ null   ┆ null       ┆ 230.75    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
└──────────────┴─────────┴──────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Contoh 10 – Filter kolom state adalah "Florida" dan kolom city mengandung kata "land" :

Python

filter_8_1 = pl.col("state") == "Florida"
filter_8_2 = pl.col("city").str.contains("land")

# data.filter(filter_8_1 & filter_8_2)

print(data.filter(filter_8_1 & filter_8_2))

Output

shape: (3_711, 8)
┌──────────────┬─────────┬──────────┬──────────────┬───────────┬────────┬──────────────┬───────────┐
│ tr_date      ┆ state   ┆ city     ┆ membership_i ┆ num_items ┆ coupon ┆ discount_amt ┆ order_amt │
│ ---          ┆ ---     ┆ ---      ┆ d            ┆ ---       ┆ ---    ┆ ---          ┆ ---       │
│ datetime[ns] ┆ str     ┆ str      ┆ ---          ┆ i64       ┆ str    ┆ f64          ┆ f64       │
│              ┆         ┆          ┆ str          ┆           ┆        ┆              ┆           │
╞══════════════╪═════════╪══════════╪══════════════╪═══════════╪════════╪══════════════╪═══════════╡
│ 2020-10-30   ┆ Florida ┆ Orlando  ┆ null         ┆ 25        ┆ null   ┆ null         ┆ 51.31     │
│ 00:00:00     ┆         ┆          ┆              ┆           ┆        ┆              ┆           │
│ 2019-11-21   ┆ Florida ┆ Lakeland ┆ null         ┆ 22        ┆ Yes    ┆ 0.5          ┆ 84.69     │
│ 00:00:00     ┆         ┆          ┆              ┆           ┆        ┆              ┆           │
│ 2020-02-14   ┆ Florida ┆ Orlando  ┆ N28-332-99   ┆ 16        ┆ null   ┆ null         ┆ 55.73     │
│ 00:00:00     ┆         ┆          ┆              ┆           ┆        ┆              ┆           │
│ 2020-01-24   ┆ Florida ┆ Orlando  ┆ null         ┆ 5         ┆ null   ┆ null         ┆ 149.51    │
│ 00:00:00     ┆         ┆          ┆              ┆           ┆        ┆              ┆           │
│ …            ┆ …       ┆ …        ┆ …            ┆ …         ┆ …      ┆ …            ┆ …         │
│ 2020-10-22   ┆ Florida ┆ Orlando  ┆ Z46-564-21   ┆ 25        ┆ Yes    ┆ 0.25         ┆ 157.63    │
│ 00:00:00     ┆         ┆          ┆              ┆           ┆        ┆              ┆           │
│ 2020-02-17   ┆ Florida ┆ Orlando  ┆ E75-924-94   ┆ 5         ┆ Yes    ┆ 0.16         ┆ 202.56    │
│ 00:00:00     ┆         ┆          ┆              ┆           ┆        ┆              ┆           │
│ 2019-10-10   ┆ Florida ┆ Orlando  ┆ Z52-600-31   ┆ 13        ┆ null   ┆ null         ┆ 232.22    │
│ 00:00:00     ┆         ┆          ┆              ┆           ┆        ┆              ┆           │
│ 2019-10-22   ┆ Florida ┆ Orlando  ┆ null         ┆ 22        ┆ null   ┆ null         ┆ 114.95    │
│ 00:00:00     ┆         ┆          ┆              ┆           ┆        ┆              ┆           │
└──────────────┴─────────┴──────────┴──────────────┴───────────┴────────┴──────────────┴───────────┘

Contoh 11 – Filter kolom state adalah "Florida", "Georgia" atau "Alabama" dan kolom coupon bernilai "Yes" :

Python

selected_state = ["Florida", "Georgia", "Alabama"]

filter_9_1 = pl.col("state").is_in(selected_state)
filter_9_2 = pl.col("coupon") == "Yes"
filter_9_3 = pl.col("num_items") > 10

# data.filter(filter_9_1 & filter_9_2 & filter_9_3)

print(data.filter(filter_9_1 & filter_9_2 & filter_9_3))

Output

shape: (13_859, 8)
┌──────────────┬─────────┬──────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date      ┆ state   ┆ city         ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---          ┆ ---     ┆ ---          ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns] ┆ str     ┆ str          ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│              ┆         ┆              ┆ str        ┆           ┆        ┆ f64        ┆           │
╞══════════════╪═════════╪══════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-07-22   ┆ Florida ┆ Sarasota     ┆ U46-940-80 ┆ 17        ┆ Yes    ┆ 0.25       ┆ 169.14    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-03-06   ┆ Georgia ┆ Lawrencevill ┆ H90-561-44 ┆ 28        ┆ Yes    ┆ 0.17       ┆ 105.71    │
│ 00:00:00     ┆         ┆ e            ┆            ┆           ┆        ┆            ┆           │
│ 2020-04-22   ┆ Alabama ┆ Birmingham   ┆ null       ┆ 22        ┆ Yes    ┆ 0.41       ┆ 176.76    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-10-07   ┆ Alabama ┆ Mobile       ┆ B03-626-07 ┆ 30        ┆ Yes    ┆ 0.34       ┆ 126.42    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ …            ┆ …       ┆ …            ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2020-10-23   ┆ Florida ┆ Naples       ┆ null       ┆ 27        ┆ Yes    ┆ 0.3        ┆ 141.25    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-06-21   ┆ Georgia ┆ Columbus     ┆ null       ┆ 17        ┆ Yes    ┆ 0.34       ┆ 155.56    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-16   ┆ Alabama ┆ Mobile       ┆ E29-461-87 ┆ 31        ┆ Yes    ┆ 0.14       ┆ 102.49    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2020-10-16   ┆ Alabama ┆ Birmingham   ┆ null       ┆ 29        ┆ Yes    ┆ 0.13       ┆ 158.22    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
└──────────────┴─────────┴──────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Contoh 12 – Filter data membership_id dengan patern [X-Z]?9-9??-[1-5]? :

Python

filter_10_1 = pl.col("membership_id").is_not_null()
filter_10_2 = pl.col("membership_id").str.contains(pattern="[X-Z]\d9-9\d\d-[1-5]\d")

# data.filter(filter_10_1 & filter_10_2)

print(data.filter(filter_10_1 & filter_10_2))

Output

shape: (20, 8)
┌─────────────┬────────────┬────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date     ┆ state      ┆ city       ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---         ┆ ---        ┆ ---        ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns ┆ str        ┆ str        ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│ ]           ┆            ┆            ┆ str        ┆           ┆        ┆ f64        ┆           │
╞═════════════╪════════════╪════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-06-10  ┆ Alabama    ┆ Birmingham ┆ Y09-907-14 ┆ 28        ┆ null   ┆ null       ┆ 128.69    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-22  ┆ Florida    ┆ Boynton    ┆ Y79-959-18 ┆ 33        ┆ null   ┆ null       ┆ 179.57    │
│ 00:00:00    ┆            ┆ Beach      ┆            ┆           ┆        ┆            ┆           │
│ 2020-02-19  ┆ Alabama    ┆ Mobile     ┆ Y39-904-45 ┆ 24        ┆ null   ┆ null       ┆ 225.17    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-03-25  ┆ Florida    ┆ Palm Bay   ┆ Z29-955-38 ┆ 30        ┆ Yes    ┆ 0.19       ┆ 191.54    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ …           ┆ …          ┆ …          ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2019-10-17  ┆ Florida    ┆ Daytona    ┆ Y79-918-38 ┆ 16        ┆ null   ┆ null       ┆ 83.69     │
│ 00:00:00    ┆            ┆ Beach      ┆            ┆           ┆        ┆            ┆           │
│ 2019-12-24  ┆ Alabama    ┆ Birmingham ┆ Y69-936-49 ┆ 19        ┆ null   ┆ null       ┆ 185.18    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-09-20  ┆ Mississipp ┆ Jackson    ┆ X09-955-14 ┆ 3         ┆ null   ┆ null       ┆ 138.51    │
│ 00:00:00    ┆ i          ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-26  ┆ Florida    ┆ Ocala      ┆ Z49-998-39 ┆ 29        ┆ null   ┆ null       ┆ 174.92    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
└─────────────┴────────────┴────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Filter Data DateTime

Kolom-kolom bertipe datetime dapat difilter menggunakan operator sama sepeti pada data numerik.

Contoh 13 – Filter berdasarkan tanggal tertentu (misal 1 Januari 2020) :

Python

filter_11 = pl.col("tr_date") == pl.datetime(2020, 1, 1)

# data.filter(filter_11)

print(data.filter(filter_11))

Output

shape: (198, 8)
┌─────────────┬────────────┬────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date     ┆ state      ┆ city       ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---         ┆ ---        ┆ ---        ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns ┆ str        ┆ str        ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│ ]           ┆            ┆            ┆ str        ┆           ┆        ┆ f64        ┆           │
╞═════════════╪════════════╪════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-01-01  ┆ Florida    ┆ Jacksonvil ┆ Y90-746-84 ┆ 3         ┆ null   ┆ null       ┆ 163.18    │
│ 00:00:00    ┆            ┆ le         ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-01  ┆ Georgia    ┆ Duluth     ┆ N54-069-70 ┆ 33        ┆ null   ┆ null       ┆ 213.16    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-01  ┆ South      ┆ Columbia   ┆ null       ┆ 3         ┆ null   ┆ null       ┆ 120.63    │
│ 00:00:00    ┆ Carolina   ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-01  ┆ Florida    ┆ Vero Beach ┆ Z81-325-76 ┆ 23        ┆ null   ┆ null       ┆ 193.26    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ …           ┆ …          ┆ …          ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2020-01-01  ┆ Florida    ┆ Fort       ┆ K35-525-05 ┆ 8         ┆ null   ┆ null       ┆ 201.99    │
│ 00:00:00    ┆            ┆ Lauderdale ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-01  ┆ Florida    ┆ Lehigh     ┆ T33-942-96 ┆ 34        ┆ null   ┆ null       ┆ 22.86     │
│ 00:00:00    ┆            ┆ Acres      ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-01  ┆ Florida    ┆ Cape Coral ┆ K41-060-07 ┆ 32        ┆ null   ┆ null       ┆ 97.19     │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-01  ┆ Alabama    ┆ Montgomery ┆ L82-292-59 ┆ 20        ┆ null   ┆ null       ┆ 214.39    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
└─────────────┴────────────┴────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Contoh 14 – Filter menurut tahun tertentu dan bulan tertentu :

Untuk mendapatkan nilai tahun, bulan, hari pada data datetime dapat melalui method dt.

Python

filter_12_1 = pl.col("tr_date").dt.year() == 2019
filter_12_2 = pl.col("tr_date").dt.month() > 6   # Bulan Juli-Des

# data.filter(filter_12_1 & filter_12_2)

print(data.filter(filter_12_1 & filter_12_2))

Output

shape: (17_624, 8)
┌──────────────┬─────────┬──────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date      ┆ state   ┆ city         ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---          ┆ ---     ┆ ---          ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns] ┆ str     ┆ str          ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│              ┆         ┆              ┆ str        ┆           ┆        ┆ f64        ┆           │
╞══════════════╪═════════╪══════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2019-11-07   ┆ Florida ┆ Homestead    ┆ null       ┆ 18        ┆ null   ┆ null       ┆ 94.76     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-27   ┆ Florida ┆ Jacksonville ┆ null       ┆ 9         ┆ null   ┆ null       ┆ 125.2     │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-10-11   ┆ Florida ┆ Fort         ┆ O72-081-20 ┆ 29        ┆ null   ┆ null       ┆ 187.34    │
│ 00:00:00     ┆         ┆ Lauderdale   ┆            ┆           ┆        ┆            ┆           │
│ 2019-10-31   ┆ Florida ┆ West Palm    ┆ K73-446-05 ┆ 19        ┆ null   ┆ null       ┆ 208.82    │
│ 00:00:00     ┆         ┆ Beach        ┆            ┆           ┆        ┆            ┆           │
│ …            ┆ …       ┆ …            ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2019-10-10   ┆ Florida ┆ Orlando      ┆ Z52-600-31 ┆ 13        ┆ null   ┆ null       ┆ 232.22    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-10-22   ┆ Florida ┆ Orlando      ┆ null       ┆ 22        ┆ null   ┆ null       ┆ 114.95    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-30   ┆ Florida ┆ Fort Pierce  ┆ G23-376-16 ┆ 12        ┆ null   ┆ null       ┆ 230.75    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-02   ┆ Georgia ┆ Athens       ┆ null       ┆ 15        ┆ null   ┆ null       ┆ 179.96    │
│ 00:00:00     ┆         ┆              ┆            ┆           ┆        ┆            ┆           │
└──────────────┴─────────┴──────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Contoh 15 – Filter antara 2 rentang tanggal :

Python

start = pl.datetime(2020, 6, 1)
end = pl.datetime(2020, 9, 30)

# inclusive
# both : start dan end termasuk dalam range
# none : start dan end tidak termasuk dalam range
# left : start masuk dalam range dan end tidak
# right : start tidak masuk dalam range dan end masuk
filter_13 = data["tr_date"].is_between(start, end, closed="both")

data.filter(filter_13)
print(data.filter(filter_13))

Output

shape: (23_240, 8)
┌───────────────┬─────────┬─────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date       ┆ state   ┆ city        ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---           ┆ ---     ┆ ---         ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns]  ┆ str     ┆ str         ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│               ┆         ┆             ┆ str        ┆           ┆        ┆ f64        ┆           │
╞═══════════════╪═════════╪═════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-06-24    ┆ Florida ┆ Miami       ┆ A23-472-61 ┆ 22        ┆ null   ┆ null       ┆ 213.68    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-07-22    ┆ Florida ┆ Sarasota    ┆ U46-940-80 ┆ 17        ┆ Yes    ┆ 0.25       ┆ 169.14    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-06-21    ┆ Alabama ┆ Birmingham  ┆ J25-217-44 ┆ 33        ┆ null   ┆ null       ┆ 47.86     │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-08-13    ┆ Florida ┆ Tampa       ┆ null       ┆ 26        ┆ null   ┆ null       ┆ 42.29     │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ …             ┆ …       ┆ …           ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2020-07-17    ┆ Florida ┆ Miami       ┆ null       ┆ 21        ┆ null   ┆ null       ┆ 198.88    │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-08-26    ┆ Alabama ┆ Birmingham  ┆ U38-420-51 ┆ 5         ┆ null   ┆ null       ┆ 98.44     │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-08-02    ┆ Florida ┆ Panama City ┆ P63-789-70 ┆ 16        ┆ null   ┆ null       ┆ 76.02     │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
│ 2020-08-21    ┆ Alabama ┆ Gadsden     ┆ E21-954-64 ┆ 14        ┆ null   ┆ null       ┆ 161.5     │
│ 00:00:00      ┆         ┆             ┆            ┆           ┆        ┆            ┆           │
└───────────────┴─────────┴─────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Mengelola Hasil Filter

Data-data yang sudah difilter dapat digunakan untuk proses lebih lanjut, misalnya:

Menganti Nilai null dengan 0 pada kolom discount_amt dan nilai null pada kolom coupon menjadi No :

Python

# filter baris yang memiliki nilai discount_amt = null
filter_14 = pl.col("discount_amt").is_null()

# filter baris yang memiliki nilai coupon = null
filter_15 = pl.col("coupon").is_null()


# jika null ganti nilainya dengan 0
data = data.with_columns(
    pl.when(filter_14)
    .then(0.0)
    .otherwise(pl.col("discount_amt"))
    .alias("discount_amt"),
    
    pl.when(filter_15)
    .then("No")
    .otherwise(pl.col("coupon"))
    .alias("coupon"),
)

# mencetak data yang sudah di-update
print(data)

Output

shape: (75_620, 8)
┌─────────────┬────────────┬────────────┬────────────┬───────────┬────────┬────────────┬───────────┐
│ tr_date     ┆ state      ┆ city       ┆ membership ┆ num_items ┆ coupon ┆ discount_a ┆ order_amt │
│ ---         ┆ ---        ┆ ---        ┆ _id        ┆ ---       ┆ ---    ┆ mt         ┆ ---       │
│ datetime[ns ┆ str        ┆ str        ┆ ---        ┆ i64       ┆ str    ┆ ---        ┆ f64       │
│ ]           ┆            ┆            ┆ str        ┆           ┆        ┆ f64        ┆           │
╞═════════════╪════════════╪════════════╪════════════╪═══════════╪════════╪════════════╪═══════════╡
│ 2020-06-24  ┆ Florida    ┆ Miami      ┆ A23-472-61 ┆ 22        ┆ No     ┆ 0.0        ┆ 213.68    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-05-15  ┆ South      ┆ Greenville ┆ null       ┆ 13        ┆ Yes    ┆ 0.33       ┆ 155.59    │
│ 00:00:00    ┆ Carolina   ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-02-20  ┆ Georgia    ┆ Atlanta    ┆ R04-941-15 ┆ 22        ┆ No     ┆ 0.0        ┆ 106.82    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2020-07-22  ┆ Florida    ┆ Sarasota   ┆ U46-940-80 ┆ 17        ┆ Yes    ┆ 0.25       ┆ 169.14    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ …           ┆ …          ┆ …          ┆ …          ┆ …         ┆ …      ┆ …          ┆ …         │
│ 2020-08-02  ┆ Florida    ┆ Panama     ┆ P63-789-70 ┆ 16        ┆ No     ┆ 0.0        ┆ 76.02     │
│ 00:00:00    ┆            ┆ City       ┆            ┆           ┆        ┆            ┆           │
│ 2020-01-11  ┆ Florida    ┆ Panama     ┆ E79-788-42 ┆ 13        ┆ No     ┆ 0.0        ┆ 104.27    │
│ 00:00:00    ┆            ┆ City       ┆            ┆           ┆        ┆            ┆           │
│ 2020-08-21  ┆ Alabama    ┆ Gadsden    ┆ E21-954-64 ┆ 14        ┆ No     ┆ 0.0        ┆ 161.5     │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
│ 2019-11-02  ┆ Georgia    ┆ Athens     ┆ null       ┆ 15        ┆ No     ┆ 0.0        ┆ 179.96    │
│ 00:00:00    ┆            ┆            ┆            ┆           ┆        ┆            ┆           │
└─────────────┴────────────┴────────────┴────────────┴───────────┴────────┴────────────┴───────────┘

Filter data untuk tahun 2020 untuk wilayah Florida dan Georgia dan simpan ke dalam file CSV :

Python

# filter baris yang memiliki tr_date : tahun 2020
filter_16_1 = pl.col("tr_date").dt.year() == 2020

filter_16_2 = pl.col("state").is_in(["Florida", "Georgia"])

# simpan hasil filter pada variabel data_2020
data_2020 = data.filter(filter_16_1 & filter_16_2)

# simpan data tahun 2020 ke dalam file csv
data_2020.write_csv("Florida_Georgia_2020.csv")

Tulisan Lainnya

Cahya Alkahfi

Data Engineer di BPS-Statistics Indonesia dan Konsultan Senior di Educativa.id. Aktif membagikan tulisan seputar sains data dan statistika di sainsdata.id

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi