如何使用 REGEX 列在 pypolars 中 str.extract_all()

问题描述 投票:0回答:1

我有两列是字符列表。我正在尝试提取列之间共有的字符。

看起来像这样:

shape: (20, 4)
┌────────────────────────────────┬───────────────────┬───────────────────┬─────────────────────┐
│ Original                       ┆ Compartment_1     ┆ Compartment_2     ┆ REGEX               │
│ ---                            ┆ ---               ┆ ---               ┆ ---                 │
│ str                            ┆ list[str]         ┆ list[str]         ┆ str                 │
╞════════════════════════════════╪═══════════════════╪═══════════════════╪═════════════════════╡
│ DsPhSBQQQhqmBDhPDsFwjwsLjlRjlt ┆ ["D", "s", … "F"] ┆ ["w", "j", … "b"] ┆ wjwsLjlRjlttvjvvtRb │
│ tv…                            ┆                   ┆                   ┆                     │
│ rNJMNNbrHrtjHLHjvwtg           ┆ ["r", "N", … "r"] ┆ ["t", "j", … "g"] ┆ tjHLHjvwtg          │
│ fNbNzZdrZnMnMPnQShFPDmnqFm     ┆ ["f", "N", … "M"] ┆ ["P", "n", … "m"] ┆ PnQShFPDmnqFm       │
│ QWVCFfQffgQCVZzVVpHsHJBqtpspJF ┆ ["Q", "W", … "V"] ┆ ["p", "H", … "q"] ┆ pHsHJBqtpspJFRHqq   │
│ RH…                            ┆                   ┆                   ┆                     │
│ …                              ┆ …                 ┆ …                 ┆ …                   │
│ ZnJHRncHHgnrsrZffTdMdMBfmMvfvR ┆ ["Z", "n", … "Z"] ┆ ["f", "f", … "R"] ┆ ffTdMdMBfmMvfvR     │
│ NWWPnZrVHrZPCDDQtzDCPLCq       ┆ ["N", "W", … "P"] ┆ ["C", "D", … "q"] ┆ CDDQtzDCPLCq        │
│ jpFjvBZhDFHZdwcmslcslBLLNl     ┆ ["j", "p", … "d"] ┆ ["w", "c", … "l"] ┆ wcmslcslBLLNl       │
│ dVtTVVCzzfrrMPNLLcnVcPLRns     ┆ ["d", "V", … "M"] ┆ ["P", "N", … "s"] ┆ PNLLcnVcPLRns       │
└────────────────────────────────┴─────────────────────┴─────────────────────┴─────────────────┘

我尝试这样做:

day3.select(
    pl.col("Compartment_1").str.extract_all(pl.col("Compartment_2"))

但是由于 extract_all 采用正则表达式参数,所以失败是可以理解的。

然后我把

Compartment_2
变成了一个名为
REGEX
的列,希望我也能通过它,但我一直得到 Null。

我还认为这可能只是因为它对 Compartment_1 是一个列表列感到愤怒,所以我尝试使用

list.eval
,但这对我来说仍然不起作用:

day3_3 = day3_2.with_columns(
    pl.col("Compartment_1")
    .list.eval(
        pl.element()
        .str.extract_all(pattern = str(pl.col("REGEX")))
    ).alias("Match")
)

有什么建议吗??

python python-polars
1个回答
2
投票

从下一个 Polars 版本 (

0.15.3
) 开始,Polars 将接受
str.extract_all
中的表达式,这意味着您可以执行以下操作:

day3.select(
    pl.col("Compartment_1").str.extract_all(pl.col("Compartment_2"))
)

正如你最初所想的那样。

© www.soinside.com 2019 - 2024. All rights reserved.