Polars字符串操作报错:如何从option_type提取数字生成strike列?
解决Polars中提取字符串前缀并转为整数的报错问题
问题原因
你写的代码报错是因为str.split("_")返回的是列表类型的表达式,后续不能再用.str命名空间去取下标,得切换到.list命名空间操作列表元素。
正确写法
方法1:修正split后的索引操作
把.str[0]改成.list[0]即可:
pl.col("option_type").str.split("_").list[0].astype(int)
方法2:更精准的正则提取(推荐)
既然已经筛选了以_P结尾的行,直接用正则提取_前的数字部分,逻辑更清晰:
pl.col("option_type").str.extract(r"(\d+)_P$").astype(int)
完整示例
假设你的DataFrame是这样的:
import polars as pl df = pl.DataFrame({ "option_type": ["300_P", "400_C", "500_P", "600_P"] }) # 筛选+生成strike列 result = df.filter(pl.col("option_type").str.ends_with("_P")).with_columns( strike=pl.col("option_type").str.split("_").list[0].astype(int) # 或者用正则写法:strike=pl.col("option_type").str.extract(r"(\d+)_P$").astype(int) ) print(result)
输出结果:
shape: (3, 2) ┌─────────────┬───────┐ │ option_type ┆ strike│ │ --- ┆ --- │ │ str ┆ i64 │ ╞═════════════╪═══════╡ │ 300_P ┆ 300 │ │ 500_P ┆ 500 │ │ 600_P ┆ 600 │ └─────────────┴───────┘
内容的提问来源于stack exchange,提问作者mr_js
相关产品推荐
相关产品推荐

