Python初学者坚持从包函数的输出创建新的pandas列
我正在尝试使用一个有用的金融软件包中的函数来计算债券的下一个息票日期以及现有数据框架中列中的其他信息。我的数据似乎格式正确,因为当我使用dataframe中各个单元格中的数据应用函数时,我得到了预期的结果,但当我尝试创建一个新列并将函数结果应用到每一行时,我得到了一个AttributeError:“Series”对象没有属性“year”。谢谢你的指导。我试图将所有相关信息放在下面的屏幕截图中,但请告诉我是否有其他信息可能有用。谢谢Python初学者坚持从包函数的输出创建新的pandas列,python,pandas,function,finance,attributeerror,Python,Pandas,Function,Finance,Attributeerror,我正在尝试使用一个有用的金融软件包中的函数来计算债券的下一个息票日期以及现有数据框架中列中的其他信息。我的数据似乎格式正确,因为当我使用dataframe中各个单元格中的数据应用函数时,我得到了预期的结果,但当我尝试创建一个新列并将函数结果应用到每一行时,我得到了一个AttributeError:“Series”对象没有属性“year”。谢谢你的指导。我试图将所有相关信息放在下面的屏幕截图中,但请告诉我是否有其他信息可能有用。谢谢 这里的问题是,您正在将整个数据帧列传递到Bond.couppcd
这里的问题是,您正在将整个数据帧列传递到
Bond.couppcd
。我们通过一次对整个数据帧进行算术运算而变得懒惰,但外部模块不知道这一点Bond.couppcd
希望一次获得一个值。你必须有一个循环,在这个循环中你可以做
df.at[i,'pcd'] = Bond.couppcd(settlement=df.at[i,'Settlement_date'], maturity=df.at[i,'Maturity_date'],frequency=2, bases=1)
如果列不存在,Pandas将创建该列。根据Tim诊断问题的有用回答,我在谷歌上搜索了如何在行上迭代函数,并得出了以下结论,虽然速度不快,但可以完成任务:
对于ind,df.iterrows()中的行:df.loc[ind,“pcd”]=Bond.couppcd(结算=df.loc[ind,“结算日”],到期=df.loc[ind,“到期日”],频率=2,基准=1)欢迎使用堆栈溢出。如果您将代码和堆栈跟踪作为文本复制到问题中,而不是发布屏幕截图的链接,您将有更好的机会获得帮助。谢谢!我很害怕。我从来没有做过这样的循环来创建一个新的专栏,但是我会尝试一下。你应该能够做
df.at[I,'pcd']=…
,我应该修正这个答案。谢谢!我不知道如何在您编写的代码中定义I。但是,我尝试了这个方法:它似乎奏效了:对于ind,df.iterrows()中的行:df.loc[ind,“pcd”]=Bond.couppcd(结算=df.loc[ind,“结算日”],到期日=df.loc[ind,“到期日”],频率=2,基准=1)