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")




