使用拆分规则字典拆分Pandas序列时遇ValueError问题求助
问题与解决方案
场景说明
现有如下Pandas DataFrame:
columns = ['ID','DESIGN_APPROVER','PLAN APPROVER','FINAL_APPROVER'] data = [['ID_001','Sheldon,US','Leonard,Canada', 'Howard,Japan'], ['ID_002','Joel,UK','Tommy,Paris', 'Angelo,Ireland']] df = pd.DataFrame(data=data , columns=columns)
数据样式:
ID DESIGN_APPROVER PLAN APPROVER FINAL_APPROVER 0 ID_001 Sheldon,US Leonard,Canada Howard,Japan 1 ID_002 Joel,UK Tommy,Paris Angelo,Ireland
已定义字典split_dict,用于指定各列拆分后的新列名:
key_list = list(set(df.columns)-{'ID'}) value_list = [['{}_NAME'.format(i),'{}_LOCATION'.format(i)] for i in key_list] split_dict = dict(zip(key_list, value_list))
split_dict内容:
{'PLAN APPROVER': ['PLAN APPROVER_NAME', 'PLAN APPROVER_LOCATION'], 'FINAL_APPROVER': ['FINAL_APPROVER_NAME', 'FINAL_APPROVER_LOCATION'], 'DESIGN_APPROVER': ['DESIGN_APPROVER_NAME','DESIGN_APPROVER_LOCATION']}
需要遍历该字典,按逗号分隔将键对应的列拆分为值指定的列,但尝试以下代码时触发错误:
for k,v in split_dict: df[v] = df[k].str.split(',', expand=True)
错误信息:
ValueError: too many values to unpack (expected 2)
错误原因
直接遍历字典时,默认仅返回字典的键,而非键值对。循环中k,v试图将单个键拆分为两个变量,导致解包值数量不匹配,触发报错。
正确实现
要遍历字典的键值对,需使用split_dict.items()方法获取每个键和对应的列名列表:
# 遍历字典的键值对 for k, v in split_dict.items(): # 按逗号拆分列,并将结果赋值给指定的新列 df[v] = df[k].str.split(',', expand=True) # 可选:删除原有的待拆分列(若无需保留) df = df.drop(list(split_dict.keys()), axis=1)
执行后,DataFrame会生成拆分后的新列,最终结果示例:
ID PLAN APPROVER_NAME PLAN APPROVER_LOCATION FINAL_APPROVER_NAME FINAL_APPROVER_LOCATION DESIGN_APPROVER_NAME DESIGN_APPROVER_LOCATION 0 ID_001 Leonard Canada Howard Japan Sheldon US 1 ID_002 Tommy Paris Angelo Ireland Joel UK
内容的提问来源于stack exchange,提问作者rams
相关产品推荐
相关产品推荐

