在Spyder中进行温度转换时忽略文本,解决类型运算错误
问题解决:华氏度转摄氏度时出现类型错误
错误原因
报错unsupported operand type(s) for -: 'str' and 'int'的核心是代码里的变量f是字符串类型,没法和整数32做减法。结合你的数据和代码,有两种大概率的原因:
- 你直接遍历DataFrame对象(
for f in data),此时遍历的是DataFrame的列名(比如YEARMODA、TEMP),全是字符串; - 读取数据时没正确解析数值列,导致温度相关列的内容被识别成字符串而非数值类型。
解决方案
假设你用pandas处理这份数据(从格式看是典型的DataFrame),按以下步骤操作:
1. 确保数据正确读取并转换数值类型
先读取数据并检查列类型,要是温度列是object(字符串),就转成数值类型:
import pandas as pd # 读取数据(替换成你的文件路径) data = pd.read_csv("temperature_data.csv") # 检查各列数据类型 print(data.dtypes) # 将温度相关列转为数值类型,无法转换的内容设为NaN data[['TEMP', 'MAX', 'MIN', 'AMPLITUDE']] = data[['TEMP', 'MAX', 'MIN', 'AMPLITUDE']].apply(pd.to_numeric, errors='coerce')
2. 执行温度转换(推荐用矢量化操作)
pandas里矢量化操作比循环效率高很多,优先用这种方式:
# 为TEMP、MAX、MIN列生成对应的摄氏度列 data['TEMP_C'] = round((data['TEMP'] - 32) / 1.8, 1) data['MAX_C'] = round((data['MAX'] - 32) / 1.8, 1) data['MIN_C'] = round((data['MIN'] - 32) / 1.8, 1) # 查看转换结果 print(data[['YEARMODA', 'TEMP', 'TEMP_C', 'MAX', 'MAX_C', 'MIN', 'MIN_C']])
3. 若坚持用循环(不推荐)
一定要用循环的话,得指定遍历目标列的数值,还要跳过NaN值:
for f in data['TEMP']: if pd.notna(f): c = round((f - 32) / 1.8, 1) print(f"华氏度:{f} → 摄氏度:{c}") else: print("无有效温度数据")
内容的提问来源于stack exchange,提问作者M. A.
相关产品推荐
相关产品推荐

