我有两列是字符列表。我正在尝试提取列之间共有的字符。
看起来像这样:
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")
)
有什么建议吗??
从下一个 Polars 版本 (
0.15.3
) 开始,Polars 将接受 str.extract_all
中的表达式,这意味着您可以执行以下操作:
day3.select(
pl.col("Compartment_1").str.extract_all(pl.col("Compartment_2"))
)
正如你最初所想的那样。