Pandas条件替换DataFrame列值时遭遇TypeError类型错误求助
解决方案:解决类型错误并完成条件替换
问题根源
报错TypeError: '<' not supported between instances of 'str' and 'float'的核心原因有两个:
age_cat列存在缺失值(NaN):NaN属于float类型,即便用astype(str)转换,NaN会被转为字符串"nan",若后续代码对age_cat有数值比较操作(比如筛选age_cat < 3),就会触发字符串与float的类型冲突。- 条件匹配可能不生效:你的示例数据中
report_stillbirth取值是中文"是"/"否",但代码中用的是英文"Yes",这会导致替换逻辑根本没执行,age_cat仍保留整数+NaN的混合类型,引发后续错误。
修复步骤
步骤1:统一条件匹配的字符串
先确认数据中report_stillbirth的实际取值,将条件改为匹配中文:
# 用中文"是"匹配数据中的对应值 mask = df['report_stillbirth'] == "是"
步骤2:处理缺失值并转换类型
选择适合你业务的方式处理缺失值:
方式A:填充缺失值后转字符串
如果需要保留缺失行,用字符串标记缺失值:
# 填充NaN为自定义字符串(比如"未知"),再转成字符串类型 df['age_cat'] = df['age_cat'].fillna("未知").astype(str) # 执行替换 df.loc[mask, 'age_cat'] = "SB"
方式B:删除含缺失值的行
如果缺失行无业务价值,直接删除:
# 删除age_cat列有缺失值的行 df = df.dropna(subset=['age_cat']) # 转成字符串类型 df['age_cat'] = df['age_cat'].astype(str) # 执行替换 df.loc[mask, 'age_cat'] = "SB"
验证结果
执行完上述代码后,检查age_cat的类型和取值:
# 查看列类型 print(df['age_cat'].dtype) # 查看样本数据 print(df[['report_stillbirth', 'age_cat']].head())
内容的提问来源于stack exchange,提问作者Lamo
相关产品推荐
相关产品推荐

