Pandas拆分单列到多列时因静态键分配触发ValueError问题求助
Pandas拆分列报错ValueError的解决方法
问题原因
你硬指定了5列来接收拆分结果,但原数据里不同行的amazon_category_and_sub_category字段拆分后列数不一样——有的拆成3列,有的4列,还有NaN行拆出来是空,导致列数不匹配,触发ValueError: Columns must be the same length as key。
两种解决办法
办法1:自动适配列数(推荐)
先拆分出完整的结果,再根据实际列数自动命名,不会出现列数不匹配的问题:
# 拆分字段,自动扩展成DataFrame,不足的列自动补NaN split_result = df['amazon_category_and_sub_category'].str.split('>', expand=True) # 给拆分后的列起名字:第一列叫Category,后面依次是Sub_Category_1、Sub_Category_2... split_result.columns = ['Category'] + [f'Sub_Category_{i}' for i in range(1, split_result.shape[1])] # 把拆分后的列合并回原数据集 df = pd.concat([df, split_result], axis=1)
办法2:固定列数补空值
如果非要用你指定的5列,可以限制拆分次数,让所有行都拆成最多5列,不足的补NaN:
# 拆分时限制最多拆4次(这样最多得到5列),自动补NaN split_result = df['amazon_category_and_sub_category'].str.split('>', expand=True, n=4) # 重命名成你要的列名 split_result.columns = ['Category', 'Sub_Category_1','Sub_Category_2','Sub_Category_3','Sub_Category_4'] # 赋值回原数据集 df[split_result.columns] = split_result
额外优化:清理空格
拆分后的内容可能带前后空格(比如' Hobbies'),可以统一去掉:
split_result = split_result.apply(lambda col: col.str.strip() if col.dtype == 'object' else col)
内容的提问来源于stack exchange,提问作者A l w a y s S u n n y
相关产品推荐
相关产品推荐

