Влияние на производительность при использовании SQL-подобного заполнения в Polars

Описание:

Я использовал SQL-подобное дополнение в запросах Polars DataFrame для лучшей читаемости и упрощения комментирования условий. Этот подход предполагает использование True (аналог 1=1 в SQL) для дополнения условной логики.

Пример SQL

В SQL дополнение с помощью 1=1 позволяет легко добавлять или удалять условия:

SELECT *
FROM employees
WHERE 1=1
  AND department = 'Sales'
  AND salary > 50000
  AND hire_date > '2020-01-01';
SELECT *
FROM employees
WHERE 1=1
  AND department = 'Sales'
  -- AND salary > 50000
  AND hire_date > '2020-01-01';

(>>>> по моему мнению <<<<) Это упрощает добавление, удаление и замену операторов. Также это упрощает git diff, поскольку добавление и удаление условий отображается как один diff.

Пример поляров

Вот эквивалент Polars, который я использовал:

# Example data
data = {
    "name": ["Alice", "Bob", "Charlie", "David"],
    "department": ["Sales", "HR", "Sales", "IT"],
    "salary": [60000, 45000, 70000, 50000],
    "hire_date": ["2021-06-01", "2019-03-15", "2020-08-20", "2018-11-05"]
}

# Create a DataFrame
df = pl.DataFrame(data)

# Filter with padding
filtered_df = df.filter(
      (
          True
          & pl.col("department").eq("Sales")
          # & pl.col("salary").gt(50000)
          & pl.col("hire_date").gt("2020-01-01")
          & True
      )
)

print(filtered_df)

Беспокойство

Меня беспокоит потенциальное влияние этого подхода на производительность в Polars. Влияет ли заполнение условий фильтра True на производительность выполнения запросов в Polars? И есть ли лучший способ сделать это?

Спасибо вам за вашу помощь.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Лично для SQL я переключился на «и в конце строки», потому что считаю, что так гораздо читабельнее. Это усложняет комментирование последней строки, но мне просто не нравится фиктивное условие 1=1.

К счастью, в современной библиотеке фреймов данных, такой как поляры, вам больше не нужно этого делать. Просто передайте несколько условий фильтра вместо одного.

filtered_df = df.filter(
    pl.col("department").eq("Sales"),
    # pl.col("salary").gt(50000),
    pl.col("hire_date").gt("2020-01-01"),
)

Да, я думаю, ты прав. «Может быть», это старая привычка, которую мне нужно оставить позади. Я чувствую себя глупо, не проверяя, принимает ли фильтр *args. Спасибо !

hugo.avlia 14.07.2024 23:52

Другие вопросы по теме