Строковые столбцы можно выбрать с помощью:
df.select(pl.col(pl.String))
и строки Dataframe можно фильтровать с помощью шаблона регулярного выражения для одного столбца, например:
df.filter(pl.col("feature").str.contains("dangerous"))
Как можно отфильтровать DataFrame с помощью списка шаблонов регулярных выражений, которые могут появиться в любом строковом столбце? То есть, если какая-либо строка в строке соответствует какому-либо шаблону регулярного выражения, сохраните эту строку целиком, отбросьте остальную часть.
EDIT 1
Вот сгенерированный df и шаблоны для проверки функциональности и производительности.
import random
from faker import Faker
import polars as pl
random.seed(42)
Faker.seed(42)
faker = Faker()
df_len = 10000
df = pl.DataFrame(
[
pl.Series("a", [random.randint(0, 511) for _ in range(df_len)]).cast(pl.Binary),
pl.Series("b", [random.randint(0, 1) for _ in range(df_len)]).cast(pl.Boolean),
pl.Series("c", faker.sentences(df_len), pl.String),
pl.Series("d", [random.randint(0, 255) for _ in range(df_len)], pl.UInt8),
pl.Series("e", faker.words(df_len), pl.String),
pl.Series(
"f",
[random.randint(0, 255) * random.TWOPI for _ in range(df_len)],
pl.Float32,
),
pl.Series("g", faker.words(df_len), pl.String),
]
)
patterns = [r"(?i)dangerous", r"always", r"(?i)prevent"]
print(df) дает:
shape: (10_000, 7)
┌────────┬───────┬─────────────────────────────────┬─────┬───────────┬─────────────┬──────────┐
│ a ┆ b ┆ c ┆ d ┆ e ┆ f ┆ g │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ binary ┆ bool ┆ str ┆ u8 ┆ str ┆ f32 ┆ str │
╞════════╪═══════╪═════════════════════════════════╪═════╪═══════════╪═════════════╪══════════╡
│ b"114" ┆ false ┆ Agent every development say. ┆ 164 ┆ let ┆ 980.17688 ┆ yard │
│ b"25" ┆ true ┆ Beautiful instead ahead despit… ┆ 210 ┆ reach ┆ 458.672516 ┆ son │
│ b"281" ┆ false ┆ Information last everything th… ┆ 230 ┆ arm ┆ 50.265484 ┆ standard │
│ b"250" ┆ false ┆ Choice whatever from behavior … ┆ 29 ┆ operation ┆ 929.911438 ┆ final │
│ b"228" ┆ false ┆ Page southern role movie win h… ┆ 242 ┆ coach ┆ 1149.822876 ┆ none │
│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
│ b"30" ┆ true ┆ Huge course partner. ┆ 249 ┆ media ┆ 1118.406982 ┆ movement │
│ b"33" ┆ true ┆ Building sign recently avoid u… ┆ 132 ┆ practice ┆ 282.743347 ┆ big │
│ b"346" ┆ false ┆ Paper will board. ┆ 72 ┆ similar ┆ 376.991119 ┆ just │
│ b"431" ┆ true ┆ Technology money worker spring… ┆ 140 ┆ sign ┆ 94.24778 ┆ audience │
│ b"267" ┆ false ┆ A third traditional ago. ┆ 40 ┆ available ┆ 615.752136 ┆ always │
└────────┴───────┴─────────────────────────────────┴─────┴───────────┴─────────────┴──────────┘
EDIT 2
Используя ответ @jqurious (самый быстрый на данный момент), правильный вывод df.filter(pl.any_horizontal(pl.col(pl.String).str.contains(regex))):
shape: (146, 7)
┌────────┬───────┬─────────────────────────────────┬─────┬───────────┬─────────────┬──────────┐
│ a ┆ b ┆ c ┆ d ┆ e ┆ f ┆ g │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ binary ┆ bool ┆ str ┆ u8 ┆ str ┆ f32 ┆ str │
╞════════╪═══════╪═════════════════════════════════╪═════╪═══════════╪═════════════╪══════════╡
│ b"57" ┆ true ┆ During prevent accept seem sho… ┆ 137 ┆ various ┆ 471.238892 ┆ customer │
│ b"269" ┆ true ┆ Ball always it focus economy b… ┆ 179 ┆ key ┆ 471.238892 ┆ guy │
│ b"250" ┆ false ┆ Admit attack energy always. ┆ 175 ┆ purpose ┆ 1281.769775 ┆ wonder │
│ b"82" ┆ false ┆ Beyond prevent entire staff. ┆ 242 ┆ hair ┆ 904.778687 ┆ around │
│ b"186" ┆ false ┆ Suffer accept letter visit alw… ┆ 134 ┆ magazine ┆ 12.566371 ┆ dream │
│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
│ b"464" ┆ true ┆ Kid prevent avoid quite brothe… ┆ 153 ┆ visit ┆ 879.645935 ┆ anything │
│ b"426" ┆ true ┆ Your sure piece simple always … ┆ 247 ┆ recently ┆ 1055.575073 ┆ laugh │
│ b"403" ┆ false ┆ Difference all machine let cha… ┆ 178 ┆ former ┆ 1061.858276 ┆ always │
│ b"184" ┆ true ┆ Morning carry event tell preve… ┆ 3 ┆ entire ┆ 1432.566284 ┆ hit │
│ b"267" ┆ false ┆ A third traditional ago. ┆ 40 ┆ available ┆ 615.752136 ┆ always │
└────────┴───────┴─────────────────────────────────┴─────┴───────────┴─────────────┴──────────┘
Подробнее здесь: https://stackoverflow.com/questions/754 ... n-in-a-lis
Как фильтровать DataFrame по любому строковому столбцу, соответствующему любому шаблону регулярного выражения в списке? ⇐ Python
Программы на Python
1762209530
Anonymous
Строковые столбцы можно выбрать с помощью:
df.select(pl.col(pl.String))
и строки Dataframe можно фильтровать с помощью шаблона регулярного выражения для одного столбца, например:
df.filter(pl.col("feature").str.contains("dangerous"))
Как можно отфильтровать DataFrame с помощью списка шаблонов регулярных выражений, которые могут появиться в любом строковом столбце? То есть, если какая-либо строка в строке соответствует какому-либо шаблону регулярного выражения, сохраните эту строку целиком, отбросьте остальную часть.
[b]EDIT 1[/b]
Вот сгенерированный df и шаблоны для проверки функциональности и производительности.
import random
from faker import Faker
import polars as pl
random.seed(42)
Faker.seed(42)
faker = Faker()
df_len = 10000
df = pl.DataFrame(
[
pl.Series("a", [random.randint(0, 511) for _ in range(df_len)]).cast(pl.Binary),
pl.Series("b", [random.randint(0, 1) for _ in range(df_len)]).cast(pl.Boolean),
pl.Series("c", faker.sentences(df_len), pl.String),
pl.Series("d", [random.randint(0, 255) for _ in range(df_len)], pl.UInt8),
pl.Series("e", faker.words(df_len), pl.String),
pl.Series(
"f",
[random.randint(0, 255) * random.TWOPI for _ in range(df_len)],
pl.Float32,
),
pl.Series("g", faker.words(df_len), pl.String),
]
)
patterns = [r"(?i)dangerous", r"always", r"(?i)prevent"]
print(df) дает:
shape: (10_000, 7)
┌────────┬───────┬─────────────────────────────────┬─────┬───────────┬─────────────┬──────────┐
│ a ┆ b ┆ c ┆ d ┆ e ┆ f ┆ g │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ binary ┆ bool ┆ str ┆ u8 ┆ str ┆ f32 ┆ str │
╞════════╪═══════╪═════════════════════════════════╪═════╪═══════════╪═════════════╪══════════╡
│ b"114" ┆ false ┆ Agent every development say. ┆ 164 ┆ let ┆ 980.17688 ┆ yard │
│ b"25" ┆ true ┆ Beautiful instead ahead despit… ┆ 210 ┆ reach ┆ 458.672516 ┆ son │
│ b"281" ┆ false ┆ Information last everything th… ┆ 230 ┆ arm ┆ 50.265484 ┆ standard │
│ b"250" ┆ false ┆ Choice whatever from behavior … ┆ 29 ┆ operation ┆ 929.911438 ┆ final │
│ b"228" ┆ false ┆ Page southern role movie win h… ┆ 242 ┆ coach ┆ 1149.822876 ┆ none │
│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
│ b"30" ┆ true ┆ Huge course partner. ┆ 249 ┆ media ┆ 1118.406982 ┆ movement │
│ b"33" ┆ true ┆ Building sign recently avoid u… ┆ 132 ┆ practice ┆ 282.743347 ┆ big │
│ b"346" ┆ false ┆ Paper will board. ┆ 72 ┆ similar ┆ 376.991119 ┆ just │
│ b"431" ┆ true ┆ Technology money worker spring… ┆ 140 ┆ sign ┆ 94.24778 ┆ audience │
│ b"267" ┆ false ┆ A third traditional ago. ┆ 40 ┆ available ┆ 615.752136 ┆ always │
└────────┴───────┴─────────────────────────────────┴─────┴───────────┴─────────────┴──────────┘
[b]EDIT 2[/b]
Используя ответ @jqurious (самый быстрый на данный момент), правильный вывод df.filter(pl.any_horizontal(pl.col(pl.String).str.contains(regex))):
shape: (146, 7)
┌────────┬───────┬─────────────────────────────────┬─────┬───────────┬─────────────┬──────────┐
│ a ┆ b ┆ c ┆ d ┆ e ┆ f ┆ g │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ binary ┆ bool ┆ str ┆ u8 ┆ str ┆ f32 ┆ str │
╞════════╪═══════╪═════════════════════════════════╪═════╪═══════════╪═════════════╪══════════╡
│ b"57" ┆ true ┆ During prevent accept seem sho… ┆ 137 ┆ various ┆ 471.238892 ┆ customer │
│ b"269" ┆ true ┆ Ball always it focus economy b… ┆ 179 ┆ key ┆ 471.238892 ┆ guy │
│ b"250" ┆ false ┆ Admit attack energy always. ┆ 175 ┆ purpose ┆ 1281.769775 ┆ wonder │
│ b"82" ┆ false ┆ Beyond prevent entire staff. ┆ 242 ┆ hair ┆ 904.778687 ┆ around │
│ b"186" ┆ false ┆ Suffer accept letter visit alw… ┆ 134 ┆ magazine ┆ 12.566371 ┆ dream │
│ … ┆ … ┆ … ┆ … ┆ … ┆ … ┆ … │
│ b"464" ┆ true ┆ Kid prevent avoid quite brothe… ┆ 153 ┆ visit ┆ 879.645935 ┆ anything │
│ b"426" ┆ true ┆ Your sure piece simple always … ┆ 247 ┆ recently ┆ 1055.575073 ┆ laugh │
│ b"403" ┆ false ┆ Difference all machine let cha… ┆ 178 ┆ former ┆ 1061.858276 ┆ always │
│ b"184" ┆ true ┆ Morning carry event tell preve… ┆ 3 ┆ entire ┆ 1432.566284 ┆ hit │
│ b"267" ┆ false ┆ A third traditional ago. ┆ 40 ┆ available ┆ 615.752136 ┆ always │
└────────┴───────┴─────────────────────────────────┴─────┴───────────┴─────────────┴──────────┘
Подробнее здесь: [url]https://stackoverflow.com/questions/75469194/how-to-filter-dataframe-by-any-string-column-matching-any-regex-pattern-in-a-lis[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия