AttributeError:在使用&in条件的情况下,“ float”对象没有属性“ isin”

如何解决AttributeError:在使用&in条件的情况下,“ float”对象没有属性“ isin”

我有一个不同年份的两个国家的人口规模表,如下所示:


   year   pop1          pop2
0   0   1.000000e+08    1.000000e+08
1   1   9.620000e+07    9.970000e+07
2   2   9.254440e+07    9.940090e+07
3   3   8.902771e+07    9.910270e+07
4   4   8.564466e+07    9.880539e+07

该表仅提供有关前300年的信息。

我正在尝试创建一个函数,该函数将告诉您人口在哪一年减少/增加了2倍,10倍和100倍。在jezrael的帮助下,我创建了以下功能


def find_year(df,init_pop,multiplier):
    pop_size=init_poP*multiplier
    pop1_values=df['pop1'].unique().tolist()
    pop2_values=df['pop2'].unique().tolist()
    
   s=pd.DataFrame(df.set_index('year').sub(pop_size).abs().idxmin(),columns =[multiplier])
   return(s)

问题是每个人口的增长率不同,为此,如果我检查人口减少10或100的时间,那么其中300万人会达到300年来的这一点,但是在这种情况下,我的功能不起作用,则最大值为300。

例如,如果我运行该结果,pop会减少0.1和0.01(pop2的年份是错误的):

find_year(data,100000000,0.1)

>>>     0.1
pop1    59
pop2    300



find_year(data,0.01)

>>>     0.01
pop1    119
pop2    300

为了修复它,我在函数中创建了条件来检查是否:

pop_size=init_poP*multiplier

位于原始df的其中一列之内,否则,不会将其添加到结果中。我尝试过这种方式:

def find_year(df,multiplier):
    pop_size=init_poP*multiplier
    pop1_values=df['pop1'].unique().tolist()
    pop2_values=df['pop2'].unique().tolist()
    
    if pop_size.isin(pop1_values) & pop_size.isin(pop2_values):
        
        s=pd.DataFrame(df.set_index('year').sub(pop_size).abs().idxmin(),columns =[multiplier])
        return(s)
    elif pop_size.isin(pop1_values) & ~pop_size.isin(pop2_values):
        s=pd.DataFrame(df.set_index('year').sub(pop_size).abs().idxmin(),columns =[multiplier])
        s.drop('pop2',axis=0,inplace=True)
        return(s)
    elif pop_size.isin(pop2_values) & ~pop_size.isin(pop1_values):
        
        s=pd.DataFrame(df.set_index('year').sub(pop_size).abs().idxmin(),columns =[multiplier])
        s.drop('pop1',inplace=True)
        return(s)
        
        

但是当我运行它时,我得到:

AttributeError:“浮动”对象没有属性“ isin”

我也尝试将数字更改为整数,但是我仍然遇到相同的错误,而不是它说的是int。 我不明白为什么会这样。

我的最终目标:添加条件,如果变量“ pop_size”不在原始表的pop1或pop2列中,它将从结果df中删除该行(即需要300年)。

编辑:如何生成我的数据:

def growth(p,r,t):
    time=np.arange(0,t+1,1)
    res=[p]
    for t in time:
        p=P*r
        res.append(p)
    return(pd.DataFrame(list(zip(time,res)),columns =['year','pop']))
        
country1=growth(100000000,0.962,300)
country2=growth(100000000,0.997,300)

data=pd.concat([country1,country2['pop']],axis=1)
data.columns=['year','pop1','pop2']
data

解决方法

由于intfloat都没有isin属性,因此您收到错误消息。它在pandas数据框上定义。现在,这可能会解决您的问题:

def find_year(df,init_pop,multiplier):
    pop_size = init_pop*multiplier
    pop1_values = df['pop1'].unique().tolist()
    pop2_values = df['pop2'].unique().tolist()
    s = pd.DataFrame(df.set_index('year').sub(
        pop_size).abs().idxmin(),columns=[multiplier])

    if pop_size in pop1_values and not pop_size in pop2_values:
        s.drop('pop2',axis=0,inplace=True)
    elif pop_size in pop2_values and not pop_size in pop1_values:
        s.drop('pop1',inplace=True)

    return s

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?