如何在Polars数据框中批量执行字符串格式化与修剪操作?
如何在Polars数据框中批量执行字符串格式化与修剪操作?
嗨,我来帮你搞定这个批量处理字符串列的需求!你有100个pl.Utf8类型的列,想要一次性完成修剪、首字母大写这类格式化操作,完全可以通过Polars的链式字符串方法来实现,效率超高。
1. 批量修剪字符串
你已经写了df_.with_columns(pl.all().str.strip_chars()),这个思路是对的!不过如果只是要去除字符串首尾的空白字符,用str.strip()会更简洁(strip_chars()默认也是处理空白,不过它支持指定要移除的特定字符,比如strip_chars(",'\"")可以去掉首尾的逗号、单引号和双引号)。
示例代码:
# 批量移除所有列的首尾空白 df_trimmed = df_.with_columns(pl.all().str.strip()) # 如果要移除特定字符,比如首尾的感叹号和问号 df_trimmed_special = df_.with_columns(pl.all().str.strip_chars("!? "))
2. 批量执行首字母大写(Proper/Title格式)
Polars提供了str.to_titlecase()方法,可以把字符串转换成每个单词首字母大写、其余字母小写的格式。你可以把它和修剪操作链式调用,一次性完成两个需求。
3. 更安全的:只针对Utf8类型列操作
如果你的数据框里还有非字符串类型的列(比如数值列),直接用pl.all()可能会报错,这时候可以用pl.col(pl.Utf8)来精准选择所有Utf8类型的列,避免误操作:
import polars as pl # 一次性完成:修剪首尾空白 + 首字母大写,仅针对Utf8列 df_formatted = df_.with_columns( pl.col(pl.Utf8).str.strip().str.to_titlecase() )
举个完整的测试例子
我们用一个小数据框来验证效果:
# 创建测试数据 df = pl.DataFrame({ "name": [" alice smith ", " bob jones "], "city": [" new york ", " los angeles "], "age": [28, 35] # 非字符串列,不会被处理 }) # 执行批量格式化操作 df_result = df.with_columns( pl.col(pl.Utf8).str.strip().str.to_titlecase() ) print(df_result)
输出结果:
shape: (2, 3) ┌────────────┬─────────────┬─────┐ │ name ┆ city ┆ age │ │ --- ┆ --- ┆ --- │ │ str ┆ str ┆ i64 │ ├────────────┼─────────────┼─────┤ │ Alice Smith┆ New York ┆ 28 │ │ Bob Jones ┆ Los Angeles ┆ 35 │ └────────────┴─────────────┴─────┘
这样你就能一次性处理所有100个Utf8列啦,既高效又省心!
备注:内容来源于stack exchange,提问作者myamulla_ciencia
相关产品推荐
相关产品推荐

