CASE_STATUS字段数值映射报错:如何正确实现字符串转数值映射?
解决CASE_STATUS字段数值映射的错误问题
你的问题出在循环的写法上——for dataset in df并不是遍历DataFrame对象,而是在遍历df的列名字符串!所以当你尝试用dataset['CASE_STATUS']时,本质是在对一个字符串做索引,自然会抛出"string indices must be integers, not str"的错误。
正确的做法(不需要循环)
直接对原DataFrame的CASE_STATUS列执行映射操作即可,因为df本身就是你要处理的数据集对象:
# 直接映射并转换为整数类型 df['CASE_STATUS'] = df['CASE_STATUS'].map( {'CERTIFIED': 1, 'CERTIFIED-WITHDRAWN': 1, 'DENIED': 0} ).astype(int)
额外优化:处理未匹配的取值
如果你的数据集里可能存在CASE_STATUS的其他未列出的取值,map会把这些值转为NaN,这时候可以用fillna填充默认值,或者改用replace方法(未匹配的值会保留原内容,也可以指定填充值):
# 使用replace,同时处理未匹配值(比如填充为-1) df['CASE_STATUS'] = df['CASE_STATUS'].replace( {'CERTIFIED': 1, 'CERTIFIED-WITHDRAWN': 1, 'DENIED': 0}, default=-1 ).astype(int)
为什么原来的循环会报错?
在Pandas中,直接遍历DataFrame(for x in df)时,迭代的是DataFrame的列标签(也就是字符串类型的列名),而不是DataFrame的行或者整个数据集。所以你的dataset变量其实是一个个列名字符串,比如"CASE_STATUS",这时候用字符串去索引字符串(dataset['CASE_STATUS'])当然不符合语法规则,就会触发错误。
内容的提问来源于stack exchange,提问作者Tony Z.
相关产品推荐
相关产品推荐

