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

如何将Pandas DataFrame特定行整数转为指定字符串?遇报错求助

问题分析与解决

错误原因

  1. 列名不匹配:你分组用的是'smoking-number'(连字符),但后续过滤用的是'smoking_number'(下划线),这会导致找不到对应列。
  2. 逻辑判断错误:用&同时判断smoking-number等于1、2、3,同一行不可能同时满足三个条件,应该用isin或者|(或)来筛选目标行。
  3. 赋值语法错误:最后一行的写法完全错误,你把loc的结果直接赋值给newdata,还试图用列表批量赋值,这会让newdata变成列表,自然没有loc属性。

正确实现方式

方法1:用map做映射(最简洁)

先定义数值到字符串的映射字典,然后直接对列进行转换:

newdata = newdf.groupby('smoking-number').mean().reset_index()
sem = newdf.groupby('smoking-number').sem().reset_index()

# 定义映射字典
smoking_map = {1: 'never', 2: 'former', 3: 'current'}
# 对目标列做映射
newdata['smoking-number'] = newdata['smoking-number'].map(smoking_map)

方法2:用replace替换

和map逻辑类似,直接用replace批量替换:

newdata = newdf.groupby('smoking-number').mean().reset_index()
sem = newdf.groupby('smoking-number').sem().reset_index()

newdata['smoking-number'] = newdata['smoking-number'].replace({1: 'never', 2: 'former', 3: 'current'})

方法3:用loc逐个赋值(适合复杂条件)

如果需要单独针对每个数值做赋值,可以这样写:

newdata = newdf.groupby('smoking-number').mean().reset_index()
sem = newdf.groupby('smoking-number').sem().reset_index()

newdata.loc[newdata['smoking-number'] == 1, 'smoking-number'] = 'never'
newdata.loc[newdata['smoking-number'] == 2, 'smoking-number'] = 'former'
newdata.loc[newdata['smoking-number'] == 3, 'smoking-number'] = 'current'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:25:32