You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用正则修改Polars列名时触发TypeError的问题求助

解决Polars列名重命名的错误问题

错误原因

你遇到的TypeError是因为re.findall()返回的是列表类型,而_join()要求所有元素都是字符串。比如处理{"C_C", "1"}时,re.findall得到['C_C', '1'],你直接把这个列表和col_str(比如'count')放到一个列表里,join时第一个元素是列表,自然报错。另外你还需要区分含引号的列和不含引号的列,只对前者按规则重命名。

修正后的代码

import polars as pl
import re

def flatten_pivot_polars(d: pl.DataFrame, col_str: str) -> pl.DataFrame:
    return d.select(
        pl.exclude(["Step", "RunId"]).name.map(lambda col_name: 
            # 处理含引号的列:拼接引号内内容 + 后缀
            '_'.join(re.findall('"([^"]*)"', col_name)) + f'_{col_str}'
            if '"' in col_name
            # 不含引号的列保留原名
            else col_name
        )
    )

# 测试代码
df = pl.DataFrame({
    "A": [0],
    "B": [1],
    '{"C_C", "1"}': [2],
    '{"D_D", "6"}': [3],
})

result_df = flatten_pivot_polars(df, 'count')
print(result_df.columns)
# 输出: ['A', 'B', 'C_C_1_count', 'D_D_6_count']

关键说明

  • 先通过'"' in col_name判断列名是否包含双引号,只对符合条件的列执行重命名逻辑
  • re.findall('"([^"]*)"', col_name)提取所有引号内的内容,返回的列表直接用_join()拼接成连续字符串
  • 最后拼接_{col_str}得到目标列名;不含引号的列直接返回原名称,避免不必要的修改

内容的提问来源于stack exchange,提问作者schoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:25:09