将DataFrame索引除x、y、z外转为浮点数时遇类型错误求助
解决DataFrame索引转换的TypeError问题
这个错误我之前也碰到过,问题出在你的索引里已经存在浮点数类型的元素了!
错误原因分析
当你执行con_tc.index.map(lambda w: float(w) if (w not in 'xyz') else w)时,索引里像0.43、0.94这类已经是float的值,会触发TypeError: 'in <string>' requires string as left operand, not float——因为in运算符要求左右操作数都是字符串类型,而这里左边的w是浮点数,没法和字符串'xyz'做成员判断。
修正后的解决方案
我们需要先判断索引元素的类型和值,再决定是否转换。用下面的代码就能实现你的需求:
con_tc.index = con_tc.index.map( lambda w: w if isinstance(w, str) and w in {'x', 'y', 'z'} else float(w) )
代码逻辑说明
- 首先检查当前索引元素是否是字符串类型,并且属于
{'x','y','z'}集合:如果是,直接保留原字符串 - 对于其他所有元素(不管原本是字符串形式的数值,还是已经是浮点数的数值),统一转换为
float类型
这样既保留了x/y/z这三个特殊索引值,又把其他所有数值类型的索引都标准化为浮点数,完美匹配你的目标。
内容的提问来源于stack exchange,提问作者Arijit Saha
相关产品推荐
相关产品推荐

