Polars применяет функцию, чтобы проверить, является ли значение строки подстрокой другой строки

Я пытаюсь проверить, содержит ли string_1 = "this example string" значение столбца в качестве подстроки.

Например, первое значение в Col B должно быть True, поскольку "example" является подстрокой string_1.

string_1 = "this example string"

df = pl.from_repr("""
┌────────┬─────────┬────────────┐
│ Col A  ┆ Col B   ┆ Col C      │
│ ---    ┆ ---     ┆ ---        │
│ str    ┆ str     ┆ str        │
╞════════╪═════════╪════════════╡
│ 448220 ┆ example ┆ 7101936801 │
│ 518398 ┆ 99999   ┆ 9999900091 │
│ 557232 ┆ 424570  ┆ 4245742060 │
└────────┴─────────┴────────────┘
""")

Это то, что я пробовал до сих пор, но возвращает следующую ошибку:

df=df.with_columns(pl.col("Col B").apply(lambda x: x in string_1).alias("new_col"))
AttributeError: 'Expr' object has no attribute 'apply'

Вместо применения вы пробовали карту?

Prayson W. Daniel 10.07.2024 06:39

Вместо того, чтобы выходить за пределы системы Expression, пробовали ли вы использовать Expression.str.contains? docs.pola.rs/api/python/stable/reference/expressions/api/…

jvanbuel 10.07.2024 06:55
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Всегда лучше избегать использования функций Python и использовать собственные полярные выражения.

  • pl.lit() для создания фиктивного столбца из string_1
  • str.contains(), чтобы проверить, содержит ли строка значение столбца.
(
    df
    .with_columns(pl.lit(string_1).str.contains(pl.col('Col B')).alias('new_col')
)

Или вы можете использовать name.keep(), если хотите проверить все столбцы.

(
    df
   .with_columns(pl.lit(string_1).str.contains(pl.all()).name.keep())
)

┌───────┬───────┬───────┐
│ Col A ┆ Col B ┆ Col C │
│ ---   ┆ ---   ┆ ---   │
│ bool  ┆ bool  ┆ bool  │
╞═══════╪═══════╪═══════╡
│ false ┆ true  ┆ false │
│ false ┆ false ┆ false │
│ false ┆ false ┆ false │
└───────┴───────┴───────┘

или что-то вроде этого, если вам нужны все новые столбцы:

(
    df
   .with_columns(pl.lit(string_1).str.contains(pl.all()).name.suffix('_match'))
)

┌────────┬─────────┬────────────┬─────────────┬─────────────┬─────────────┐
│ Col A  ┆ Col B   ┆ Col C      ┆ Col A_match ┆ Col B_match ┆ Col C_match │
│ ---    ┆ ---     ┆ ---        ┆ ---         ┆ ---         ┆ ---         │
│ str    ┆ str     ┆ str        ┆ bool        ┆ bool        ┆ bool        │
╞════════╪═════════╪════════════╪═════════════╪═════════════╪═════════════╡
│ 448220 ┆ example ┆ 7101936801 ┆ false       ┆ true        ┆ false       │
│ 518398 ┆ 99999   ┆ 9999900091 ┆ false       ┆ false       ┆ false       │
│ 557232 ┆ 424570  ┆ 4245742060 ┆ false       ┆ false       ┆ false       │
└────────┴─────────┴────────────┴─────────────┴─────────────┴─────────────┘

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