我在将列合并为一列时遇到问题。假设我有一个如下所示的数据框(df):
>> print(df)
shape: (3, 4)
┌─────┬───────┬───────┬───────┐
│ a ┆ b_a_1 ┆ b_a_2 ┆ b_a_3 │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str ┆ str │
╞═════╪═══════╪═══════╪═══════╡
│ 1 ┆ a-- ┆ ┆ │
├╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ 1 ┆ ┆ b-- ┆ │
├╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ 1 ┆ ┆ ┆ c-- │
└─────┴───────┴───────┴───────┘
我希望能够使用 python-polars 将最后三 (3) 列合并为一列。我已经尝试并成功得到了我想要的。然而,
>> out = df.select(pl.concat_str(['b_a_1', 'b_a_2', 'b_a_3']).alias('b_a'))
>> print(out)
shape: (3, 1)
┌─────┐
│ b_a │
│ --- │
│ str │
╞═════╡
│ a-- │
├╌╌╌╌╌┤
│ b-- │
├╌╌╌╌╌┤
│ c-- │
└─────┘
当我使用正则表达式选择列时,我没有得到上述结果
>> out = df.select(pl.concat_str('^b_a_\d$'))
>> print(out)
shape: (3, 3)
┌───────┬───────┬───────┐
│ b_a_1 ┆ b_a_2 ┆ b_a_3 │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ str │
╞═══════╪═══════╪═══════╡
│ a-- ┆ ┆ │
├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ ┆ b-- ┆ │
├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌┤
│ ┆ ┆ c-- │
└───────┴───────┴───────┘
运行时什么也没有
>> out = df.select(pl.concat_str('^b_a_*$'))
>> print(out)
shape: (0, 0)
┌┐
╞╡
└┘
如何使用正则表达式选择列并将它们合并为一列?
非常感谢您的时间和建议。
真诚的, 蒂安
由于 polars.concat_str
在将 str 与 null 连接时的
当前行为是输出 null,因此可能的解决方法是使用
.fill_null
,在相关列上将 Null 替换为空字符串。
(
df.select([
pl.concat_str(
pl.col("^b_a_\d$").fill_null("").alias("b_a")
)
])
)
shape: (3, 1)
┌─────┐
│ b_a │
│ --- │
│ str │
╞═════╡
│ a-- │
├╌╌╌╌╌┤
│ b-- │
├╌╌╌╌╌┤
│ c-- │
└─────┘
pl.concat_str
扩展了与输入中的正则表达式匹配的列。此外,pl.concat_str
接受参数ignore_nulls=True
以忽略任何空值。
df.select(pl.concat_str(pl.col("^b_a_\d$"), ignore_nulls=True))
shape: (3, 1)
┌───────┐
│ b_a_1 │
│ --- │
│ str │
╞═══════╡
│ a-- │
│ b-- │
│ c-- │
└───────┘