You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

拆分DataFrame的sex列为male、female列时遇ValueError问题

解决DataFrame拆分sex字段时的ValueError问题

你遇到的ValueError: Columns must be same length as key,本质是str.split(expand=True)返回的结果列数,和你要赋值的目标列数(2列)不匹配。比如你的sex字段里的内容要么是单个值(每行只有male或female,无分隔符),拆分后仅生成1列;要么部分行拆分后列数不等于2,导致整体返回的DataFrame列数和你指定的['male','female']数量对不上。

根据你“按性别拆分为male和female分组、生成对应列”的需求,正确的实现方式如下:

方法1:使用独热编码(推荐)

这是处理分类字段拆分最简洁的方式,自动生成对应性别列:

import pandas as pd
# 生成性别独热编码列
dummies = pd.get_dummies(Gender_Years['sex'], prefix='', prefix_sep='')
# 将新列合并到原DataFrame
Gender_Years = pd.concat([Gender_Years, dummies], axis=1)

执行后会自动生成male和female列,对应行的性别值为1,其余为0。

方法2:手动赋值列

如果需要更灵活的逻辑控制,可以手动初始化并赋值:

# 先初始化两列为0
Gender_Years['male'] = 0
Gender_Years['female'] = 0
# 根据sex字段的值给对应列赋值
Gender_Years.loc[Gender_Years['sex'] == 'male', 'male'] = 1
Gender_Years.loc[Gender_Years['sex'] == 'female', 'female'] = 1

若确实需要字符串拆分(比如sex字段是复合值)

如果你的sex字段内容是用分隔符连接的(比如"male,female"),先确认分隔符正确,确保每行拆分后都是2列:

# 指定正确的分隔符(示例用逗号,根据实际情况修改)
split_result = Gender_Years['sex'].str.split(',', expand=True)
# 检查拆分后的列数
print(split_result.shape[1])
# 确认列数为2后再赋值,否则填充空值补全列数
if split_result.shape[1] == 2:
    Gender_Years[['male', 'female']] = split_result
else:
    split_result = split_result.reindex(columns=[0,1], fill_value='')
    Gender_Years[['male', 'female']] = split_result

内容的提问来源于stack exchange,提问作者DavidJohnZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:52:15