如何将Pandas DataFrame特定行整数转为指定字符串?遇报错求助
问题分析与解决
错误原因
- 列名不匹配:你分组用的是
'smoking-number'(连字符),但后续过滤用的是'smoking_number'(下划线),这会导致找不到对应列。 - 逻辑判断错误:用
&同时判断smoking-number等于1、2、3,同一行不可能同时满足三个条件,应该用isin或者|(或)来筛选目标行。 - 赋值语法错误:最后一行的写法完全错误,你把
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
相关产品推荐
相关产品推荐

