Pandas列含字符串引发运算报错:如何检查并删除字符串?
解决Pandas中TypeError: unsupported operand type(s) for -: 'str' and 'int'问题
这个错误原因很直接:你的value列里混合了字符串类型的数据,导致lambda函数尝试用字符串和整数32做减法时触发了类型不兼容的报错。下面分两步帮你搞定——先定位这些字符串,再处理掉它们:
第一步:检查哪些行包含字符串
首先,你可以快速筛选出所有带字符串的行,方便排查这些无效数据的来源:
# 筛选出value列是字符串的行 str_entries = frame[frame['value'].apply(lambda x: isinstance(x, str))] print(str_entries)
如果想统计列内各数据类型的占比,也可以用这行代码:
print(frame['value'].apply(type).value_counts())
这里要注意:如果列里的字符串是数字格式(比如'86'这种),我们可以尝试把它们转成数值保留下来;如果是完全无效的字符串(比如'无数据'、'N/A'),直接删掉就行。
第二步:处理字符串数据
方案1:尝试将所有元素转为数值(推荐)
用pd.to_numeric工具,把能转成数值的字符串自动转成数字,无法转换的内容设为NaN,之后再删掉这些空值行:
# 转换列类型,无法转换的内容设为NaN frame['value'] = pd.to_numeric(frame['value'], errors='coerce') # 删除value列为空的行 frame = frame.dropna(subset=['value'])
这种方式既保留了可转换的数字字符串,又清理了无效数据,之后你的温度转换代码就能正常运行了。
方案2:直接删除所有含字符串的行
如果你确定不需要这些带字符串的行,也可以直接过滤掉:
# 只保留value列不是字符串的行 frame = frame[frame['value'].apply(lambda x: not isinstance(x, str))]
最后执行你的转换代码
处理完数据类型问题后,就可以运行温度转换的代码了。这里推荐用Pandas的向量运算代替apply,效率会比逐行处理高很多:
frame['value_c'] = (frame['value'] - 32) * 9/5
内容的提问来源于stack exchange,提问作者Yabin Da
相关产品推荐
相关产品推荐

