Pandas按分隔符拆分编码并拼接生成标准化编码的实现问题
报错原因
你当前代码触发广播错误的核心问题是:df['tempCol1'].str.rsplit('-', 1)[0]取的是整个Series返回结果的第一个元素,而非每行拆分后的第一个值,导致拼接时维度不匹配。
实现方案
直接写一个适配所有场景的自定义处理函数,覆盖补全/后缀、替换分隔符、保留特殊值的所有需求,避免拆分多列导致的维度问题:
import pandas as pd import numpy as np def standardize_code(code): # 处理空值、预设特殊值直接返回 if pd.isna(code) or code in ('dummy', 'unset'): return code # 先处理/分隔的编码补全逻辑 if '/' in code: part1, part2 = [x.strip() for x in code.split('/', 1)] # 取前半段编码最后一个-之前的前缀 prefix = part1.rsplit('-', 1)[0] full_part2 = f"{prefix}-{part2}" code = f"{part1};{full_part2}" # 替换&、#分隔符为标准分隔符; code = code.replace('&', ';').replace('#', ';') # 清理编码前后多余空格 return ';'.join([x.strip() for x in code.split(';')]) # 直接应用函数生成ColB df['ColB'] = df['ColA'].apply(standardize_code)
如果你的场景里还有其他需要直接保留的特殊字符串,直接补充到函数开头的判断元组中即可。
效果验证
可通过测试用例确认输出符合要求:
# 构造测试数据 test_df = pd.DataFrame({ 'ColA': [ 'k500-899-200 / 300', 'abc-123&def-456', 'xyz-789#qwe-101', 'single-1234', np.nan, 'dummy', 'unset' ] }) test_df['ColB'] = test_df['ColA'].apply(standardize_code) print(test_df)
输出结果:
ColA ColB 0 k500-899-200 / 300 k500-899-200;k500-899-300 1 abc-123&def-456 abc-123;def-456 2 xyz-789#qwe-101 xyz-789;qwe-101 3 single-1234 single-1234 4 NaN NaN 5 dummy dummy 6 unset unset
内容的提问来源于stack exchange,提问作者user14380579
相关产品推荐
相关产品推荐

