使用正则修改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
相关产品推荐
相关产品推荐

