You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 11:05:29