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

You may also like...

Leave a Reply

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

Daftar Isi