使用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
相关产品推荐
相关产品推荐

