使用Python动态拆分字符串 重复拆分赋值代码如何改写为循环或函数
Pandas重复分割代码优化方案
你原来的写法存在冗余性能损耗:每生成一列就重复执行一次str.split('|'),相当于每行数据被分割了10次,数据量大时会浪费大量算力,完全可以优化为一次分割完成所有列生成。
方案1:原生Pandas最简写法(推荐,无需循环)
这是效率最高的实现,逻辑和你原代码完全一致,分割不足10个元素的位置会自动填充NaN:
import pandas as pd # 一次分割直接生成10列的DataFrame,n=9表示最多分割9次,避免多余分割 split_brands = df['SAMPLES'].str.split('|', expand=True, n=9) # 批量设置列名 split_brands.columns = [f'BRAND {i+1}' for i in range(10)] # 合并到原DataFrame df = pd.concat([df, split_brands], axis=1)
方案2:循环实现(适合需要自定义每列处理逻辑的场景)
如果必须用循环实现,也只需要执行一次分割操作,再循环赋值即可:
# 先统一完成全量分割 split_res = df['SAMPLES'].str.split('|') # 循环赋值生成10列 for idx in range(10): df[f'BRAND {idx+1}'] = split_res.str[idx]
方案3:封装为通用复用函数
如果需要在多个场景复用该逻辑,可以封装为通用函数,支持自定义列名、分隔符、生成列数量等参数:
def split_column_to_multi(df, source_col: str, col_prefix: str, col_count: int, sep: str = '|') -> pd.DataFrame: """ 将DataFrame指定列按分隔符分割为多列,合并到原表后返回 :param df: 原DataFrame :param source_col: 待分割的源列名 :param col_prefix: 生成新列的名称前缀 :param col_count: 需要生成的列数量 :param sep: 分割符,默认是| """ split_df = df[source_col].str.split(sep, expand=True, n=col_count-1) split_df.columns = [f'{col_prefix} {i+1}' for i in range(col_count)] return pd.concat([df, split_df], axis=1) # 调用示例 df = split_column_to_multi(df, source_col='SAMPLES', col_prefix='BRAND', col_count=10)
内容的提问来源于stack exchange,提问作者Trunks
相关产品推荐
相关产品推荐

