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