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

使用pd.read_table的converters参数时触发TypeError的问题

解决pd.read_table中converters参数转换温度列的TypeError问题

我明白你的问题了——单独运行开尔文转华氏度的函数没问题,但用converters参数时就报错,核心原因是**converters的工作逻辑和你想的不一样**:它是对每一个单元格的原始字符串值单独处理,而不是直接接收整个Series/DataFrame。

你现在的k2f函数是针对整个Series做向量运算,但当用在converters里时,传入函数的其实是单个单元格的字符串(比如"294.6"),这时候执行df - 273.15就相当于用字符串减浮点数,自然会触发TypeError。

解决方案1:修改转换函数适配converters

把函数改成处理单个字符串(或数值)的逻辑,先转成float再计算:

def k2f_single(value):
    # 先把字符串转成浮点数,再计算
    temp_k = float(value)
    return (temp_k - 273.15) * 1.8 + 32.00

# 或者用lambda表达式更简洁
k2f_lambda = lambda x: (float(x) - 273.15) * 1.8 + 32.00

然后在pd.read_table里这样用:

df = pd.read_table("你的文件路径", converters={"temp": k2f_single})

解决方案2:先读取数据再转换(更直观)

如果觉得converters的逻辑容易搞混,也可以先正常读取数据(此时temp列已经是float64类型,和你说的一样),再用原来的函数批量转换:

df = pd.read_table("你的文件路径")
df["temp"] = (df["temp"] - 273.15) * 1.8 + 32.00
# 或者调用你原来的函数
def k2f(series):
    return (series - 273.15) * 1.8 + 32.00
df["temp"] = k2f(df["temp"])

这种方式更符合常规的Pandas操作逻辑,也不容易出错。

验证结果

不管用哪种方法,转换后可以检查一下df['temp'].dtype,应该还是float64,同时数值已经正确转成华氏度了。

内容的提问来源于stack exchange,提问作者Danny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:50:58