Python如何将pandas DataFrame低于阈值的值替换为字符串并修复代码报错
问题原因与修复方案
问题原因
- 整行被修改的问题:代码中使用
rule.any(axis=1)作为行筛选条件,只要某行存在任意一个数值列小于限值,就会选中整行所有的数值列统一赋值为0,会篡改同一行中符合要求的正常数值。同时代码存在变量名错误,筛选得到的数值列存储在column变量中,但赋值时误用了未定义的cols变量。 - 类型错误的问题:先将部分单元格赋值为整数0,后续又直接对混合了整数、字符串类型的DataFrame做全局布尔索引赋值字符串,pandas不支持混合类型下的这类原地布尔赋值操作,因此触发报错。
修复方案
去掉中间转0的冗余步骤,直接针对数值列的符合条件单元格做替换即可,推荐使用pandas的mask方法实现,修复后的代码如下:
import pandas as pd def limit(data, limit_val=10): # 筛选所有数值型列,可按需调整包含的类型(如新增float64) num_cols = data.select_dtypes(include=['int64']).columns # 仅将数值列中小于限值的单元格替换为目标字符串 data[num_cols] = data[num_cols].mask(data[num_cols] < limit_val, f'Less than {limit_val} starts') return data # 测试示例 DataFrame = pd.DataFrame({'Country': ['Australia', 'United Kingdom', 'USA', 'Japan'], 'Participants': [30,2,4,11], 'Passed': [20,15,2,7]}) DataFrame = limit(DataFrame, limit_val = 10)
运行后Japan行的Participants字段会保留原值11,仅Passed字段会被替换为目标字符串,两个问题均可解决。
内容的提问来源于stack exchange,提问作者ds_1234
相关产品推荐
相关产品推荐

