scipy.interpolate.interp1d调用报str与float不支持<比较的TypeError排查
报错原因分析
错误的核心原因是你传入scipy.interpolate.interp1d的插值源数据存在非数值的字符串类型内容,插值过程中执行排序匹配逻辑时,字符串和浮点型数值无法进行大小比较,最终触发类型错误。
具体问题定位&解决步骤
- 首先检查数据读入逻辑的正确性:你当前使用
delimiter = ' '作为分隔符读取文本文件,如果源文件内的列是通过多个空格、制表符等空白字符分隔的,会导致pandas读取到大量空值列,甚至将数值列识别为字符串类型(object类型)。
解决方法:将读入代码改为使用sep='\s+'参数,自动匹配任意长度的空白字符作为分隔符,示例如下:VLE_data = pd.read_csv('VLE data.txt', sep='\s+', header=1, usecols=usecols) - 读完数据后校验列的类型,执行
print(VLE_data.dtypes)查看methyl、acetate、(1)三列的类型,如果显示为object说明确实被识别为字符串,需要手动转成数值类型:# 将指定列转为数值,无法转换的内容会变成NaN VLE_data['methyl'] = pd.to_numeric(VLE_data['methyl'], errors='coerce') VLE_data['acetate'] = pd.to_numeric(VLE_data['acetate'], errors='coerce') VLE_data['(1)'] = pd.to_numeric(VLE_data['(1)'], errors='coerce') # 删除包含NaN的无效行 VLE_data = VLE_data.dropna() - 你代码中
set_index('methyl')后又删除methyl行的操作也存在风险,确认你源数据的表头结构,避免残留表头字符串进入后续的数值计算环节。
内容的提问来源于stack exchange,提问作者regulatefy
相关产品推荐
相关产品推荐

