Filter Rows in Polars: Numbers, Strings, Dates, Nulls

Filter a Polars DataFrame by number, string match, null, and date, including rows that are not valid dates. Combine conditions and use pl.lit.

1 min read

Filter Rows in Polars: Numbers, Strings, Dates, Nulls cover

Every filter in Polars is an expression, not a string. That feels different at first but pays off the moment you chain conditions. Here is how to filter by number, text, null, and date.

Filter by a number

Compare the column expression directly. For a range, is_between reads cleaner than two comparisons.

  • df.filter(pl.col("amount") > 100)

  • df.filter(pl.col("amount").is_between(10, 50))

  • df.filter(pl.col("id").is_in([1, 2, 3]))

Combine conditions

Use & and | between conditions, and wrap each one in parentheses. That parenthesis rule trips up almost everyone once.

  • df.filter((pl.col("amount") > 100) & (pl.col("country") == "US"))

  • df.filter((pl.col("a") < 0) | (pl.col("b").is_null()))

Filter by string (contains, like)

Polars has no LIKE keyword. Use the str namespace: contains for a substring or regex, starts_with and ends_with for anchors.

  • df.filter(pl.col("name").str.contains("adil")) # substring or regex

  • df.filter(pl.col("email").str.ends_with("@gmail.com"))

  • df.filter(pl.col("sku").str.starts_with("AB"))

Filter nulls and use pl.lit

is_null and is_not_null handle missing data. pl.lit wraps a constant so Polars treats it as a value, not a column name, which matters inside a filter.

  • df.filter(pl.col("email").is_not_null())

  • df.filter(pl.col("status") == pl.lit("active"))

Filter dates, and rows that are not valid dates

Parse strings with str.to_date. To keep only the rows where a value is not a valid date, parse with strict=False so bad values become null, then filter on is_null.

  • df.filter(pl.col("d").str.to_date("%Y-%m-%d") > pl.date(2026, 1, 1))

  • # rows where the value is NOT a valid date:

  • df.with_columns(pl.col("d").str.to_date("%Y-%m-%d", strict=False).alias("parsed")).filter(pl.col("parsed").is_null())

For creating frames to filter, see creating DataFrames; to inspect the result, see viewing DataFrames. Full reference: the Python Polars cheat sheet.

Building something with AI? Let's talk.

I design and ship production AI and full-stack products for US teams. See how I can help.

View all services

Join the newsletter

Be the first to read our articles.