AccueilBlogTest technique Polars avance : API lazy, expressions, performances
Guide recrutement data

Test technique Polars avance : API lazy, expressions, performances

Polars est 5 a 50 fois plus rapide que pandas sur les agregations. En 2025, les equipes data migrent vers Polars pour les traitements intensifs. Voici ce qu on evalue en entretien.

Data Builder·Juin 2025·6 min de lecture·Data Engineer · Data Scientist
Sommaire
  1. Pourquoi Polars
  2. API Eager vs Lazy
  3. Expressions et contextes
  4. Join strategies
  5. Interoperabilite
  6. Migrer depuis pandas
  7. Grille

1Pourquoi Polars bat pandas

Question discriminante

Quelles sont les raisons techniques pour lesquelles Polars est plus rapide que pandas ?

2API Eager vs Lazy

Question discriminante

Dans quel cas utilisez-vous l API Lazy plutot que l API Eager ?

import polars as pl # API Eager : execution immediate df = pl.read_csv('data.csv') result = ( df .filter(pl.col('amount') > 100) .group_by('category') .agg(pl.col('amount').sum().alias('total')) ) # API Lazy : execution differee et optimisee result = ( pl.scan_csv('data.csv') # scan = lecture lazy .filter(pl.col('amount') > 100) .group_by('category') .agg(pl.col('amount').sum().alias('total')) .collect() # declenche l execution ) # Voir le plan d execution optimise print(result.explain())

3Expressions et contextes

Question discriminante

Quelle est la difference entre les contextes select, filter, group_by et with_columns ?

# Expressions : le coeur de Polars df.select([ pl.col('revenue'), pl.col('revenue').log(base=10).alias('log_revenue'), (pl.col('revenue') / pl.col('cost') - 1).alias('margin_pct'), pl.col('date').dt.month().alias('month'), pl.col('name').str.to_uppercase().alias('name_upper') ]) # Agregations complexes df.group_by('category').agg([ pl.col('revenue').sum(), pl.col('revenue').mean().alias('avg_revenue'), pl.col('customer_id').n_unique().alias('nb_clients'), pl.col('amount').filter(pl.col('status') == 'completed').sum().alias('completed_sum') ])

4Performances des jointures

Question discriminante

Quels types de join Polars propose-t-il ? Quand utilisez-vous un semi-join ?

5Interoperabilite : Arrow, pandas, DuckDB

# Conversion zero-copy vers pandas via Apache Arrow pandas_df = polars_df.to_pandas() polars_df = pl.from_pandas(pandas_df) # DuckDB peut requeter directement un LazyFrame Polars import duckdb result = duckdb.sql('SELECT category, SUM(amount) FROM polars_df GROUP BY 1').pl() # Lire/ecrire Parquet (format natif Apache Arrow) df = pl.read_parquet('data/*.parquet') df.write_parquet('output.parquet', compression='zstd')

6Equivalences pandas → Polars

pandasPolars equivalent
df['col']df['col'] ou pl.col('col')
df.rename(columns={})df.rename({})
df.fillna(0)df.fill_null(0)
df.apply(func)df.map_elements(func) ou expressions natives
pd.to_datetime()pl.col('date').str.to_datetime('%Y-%m-%d')
df.merge()df.join()

7Grille par niveau

NiveauMaitriseSignal GONO-GO
ConfirmeAPI Eager, expressions courantes, read/write ParquetSait recrire un pipeline pandas en Polars, connait les expressions de baseN a jamais utilise Polars
SeniorAPI Lazy, query planning, join strategies, benchmarksUtilise scan_parquet + lazy par defaut, connait semi/anti join, a benchmarke vs pandasNe sait pas expliquer le query planning Polars

Vous recrutez un Data Engineer Python ?

Premier entretien gratuit. Rapport GO/NO-GO sous 48h.