标题:【求助】为何函数两个输入,计算出来的结果类型都变了?
只看楼主
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:934
专家分:5244
注 册:2015-8-10
结帖率:100%
已结贴  问题点数:20 回复次数:2 
【求助】为何函数两个输入,计算出来的结果类型都变了?
如题,这段代码作用:已知的X、Y,给定特定的X,求对应的Y,结果用于其他运算,批量运行的时候发生错误
调试发现在特定的数(0.7504454145097735,不知道是否还有其他数会出问题),返回值类型变了。正常应该是一个float类型的数,但是报错的时候返回的是一个Series

求大神帮助解答和解决一下,十分感谢
程序代码:
import pandas as pd
import numpy

def getPhi(Tr):   #插值方法
    data = pd.DataFrame()
    data["x"] = [0.998833, 0.980093, 0.958801, 0.940904, 0.926416, 0.911097, 0.901715, 0.883854, 0.867716, 0.856648,
                 0.836247, 0.818398, 0.803934, 0.792023, 0.778426, 0.760601, 0.74362, 0.725772, 0.703708, 0.686762,
                 0.662193, 0.642707, 0.624942, 0.599566, 0.589425, 0.570842, 0.556486]
    data["y"] = [0.638418, 0.660927, 0.686246, 0.708767, 0.727066, 0.74393, 0.756608, 0.774859, 0.788864, 0.801518,
                 0.821157, 0.837984, 0.853437, 0.866079, 0.878696, 0.892678, 0.906671, 0.923499, 0.940266, 0.949989,
                 0.963875, 0.974985, 0.98185, 0.991453, 0.994156, 0.998161, 1]
    n = Tr
    if n<=0.662193:
        return 0.998833
    elif n>=1:
        return 0.556486
    else:
        new = pd.DataFrame([[n, numpy.NaN]], columns=data.columns)
        #print(new)
        data = data.append(new, ignore_index=True)
        data = data.sort_values(by='x', axis=0, ascending=True)
        data['y'] = data['y'].interpolate(method='linear')
        #print(data)
        new = data[data.x == n]
        return new.y

print(type(getPhi(0.7504454145097735)))
print(type(getPhi(0.6)))


下面是结果:
<class 'pandas.core.series.Series'>
<class 'float'>
搜索更多相关主题的帖子: 类型 结果 print new data 
2020-09-10 16:39
fall_bernana
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:17
帖 子:240
专家分:2086
注 册:2019-8-16
得分:20 
以下是引用xiangyue0510在2020-9-10 16:39:52的发言:

如题,这段代码作用:已知的X、Y,给定特定的X,求对应的Y,结果用于其他运算,批量运行的时候发生错误
调试发现在特定的数(0.7504454145097735,不知道是否还有其他数会出问题),返回值类型变了。正常应该是一个float类型的数,但是报错的时候返回的是一个Series

求大神帮助解答和解决一下,十分感谢

import pandas as pd
import numpy

def getPhi(Tr):   #插值方法
    data = pd.DataFrame()
    data["x"] = [0.998833, 0.980093, 0.958801, 0.940904, 0.926416, 0.911097, 0.901715, 0.883854, 0.867716, 0.856648,
                 0.836247, 0.818398, 0.803934, 0.792023, 0.778426, 0.760601, 0.74362, 0.725772, 0.703708, 0.686762,
                 0.662193, 0.642707, 0.624942, 0.599566, 0.589425, 0.570842, 0.556486]
    data["y"] = [0.638418, 0.660927, 0.686246, 0.708767, 0.727066, 0.74393, 0.756608, 0.774859, 0.788864, 0.801518,
                 0.821157, 0.837984, 0.853437, 0.866079, 0.878696, 0.892678, 0.906671, 0.923499, 0.940266, 0.949989,
                 0.963875, 0.974985, 0.98185, 0.991453, 0.994156, 0.998161, 1]
    n = Tr
    if n<=0.662193:
        return 0.998833
    elif n>=1:
        return 0.556486
    else:
        new = pd.DataFrame([[n, numpy.NaN]], columns=data.columns)
        #print(new)
        data = data.append(new, ignore_index=True)
        data = data.sort_values(by='x', axis=0, ascending=True)
        data['y'] = data['y'].interpolate(method='linear')
        #print(data)
        new = data[data.x == n]
        return new.y

print(type(getPhi(0.7504454145097735)))
print(type(getPhi(0.6)))


下面是结果:

<class 'pandas.core.series.Series'>
<class 'float'>


你没注意到吗?getPhi(0.6) 走的是
if n<=0.662193:
        return 0.998833
getPhi(0.7504454145097735)走的是:
else:
        new = pd.DataFrame([[n, numpy.NaN]], columns=data.columns)
        ...........
        return new.y
是不是这个原因?你可以尝试 return new.y.tolist()[0]来获取new.y的float值

[此贴子已经被作者于2020-9-10 17:43编辑过]

2020-09-10 17:21
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:934
专家分:5244
注 册:2015-8-10
得分:0 
回复 2楼 fall_bernana
感谢,这个地方真没太注意。当时写好这段代码之后单独测试了一下,看了一下返回值是对的,没注意类型就放在一块用了。
十分感谢
2020-09-14 13:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-503123-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.057608 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved