尝试更新数据帧中的单元格时"IndexError: iloc cannot enlarge its target object"



我正试图计算一段时间内某个账户的运行总额和应计利息。运行总额是一天的免费现金加上前一天应计利息的总和

我正在尝试更新使用iterrow((设计的for循环中的数据帧的合计列(running_Tot列(和累计利息列(interest_accr列(。但这次更新似乎实际上是在试图在数据帧中创建新的列,由于iloc不允许扩展目标对象,因此它引发了一个错误。

我观察到我可以在for-iterrow((循环之外使用.iloc而不会出现任何错误(例如-df3.iloc[0],df3.columns.get_loc('Running_Tot'(]=df3.iloc[0],df3.columns.get-loc('free_cash'(](,但当我尝试在for-迭代((循环中执行类似操作时,我会得到IndexError(例如-df3.iloc[index,df3.columns.get_loc('Running_Tot'(]=runtot(。

你能帮我理解如何在iterrow((中更新列的值,而不在这个过程中创建新列吗?

谢谢!

df3 = df_cash[df_cash['acct_num'] == '12345678']
df3.sort_values(['cal_date'], axis=0, ascending = True, inplace=True)
df3.iloc[0, df3.columns.get_loc('Running_Tot')] = df3.iloc[0, df3.columns.get_loc('free_cash')]
intaccr = 0
for index, row in df3.iterrows():
runtot = row['free_cash'] + intaccr
intaccr = row['Running_Tot'] * (row['bdp_rate'] / (365 * 100))
df3.iloc[index, df3.columns.get_loc('Running_Tot')] = runtot #this line is throwing error
df3.iloc[index, df3.columns.get_loc('Interest_accr')] = intaccr
df3

您的错误表明您正试图为越界索引赋值。此外,它还表示,在这种情况下,iloc无法放大DataFrame。使用iterrows((意味着"index"值将采用DataFrame中的任意索引集。然而,iloc只能使用长度为0到1的索引(和布尔数组,但在这里无关(进行访问。

为此,您可以使用enumerate函数。此外,您可以在您的情况下使用.loc,这对于DataFrame放大也更灵活(即使您不需要它(。

这应该有效:

df3 = df_cash[df_cash['acct_num'] == '12345678']
df3.sort_values(['cal_date'], axis=0, ascending = True, inplace=True)
df3.loc[0, 'Running_Tot'] = df3.loc[0, 'free_cash']
intaccr = 0
for index, row in enumerate(df3):
runtot = row['free_cash'] + intaccr
intaccr = row['Running_Tot'] * (row['bdp_rate'] / (365 * 100))
df3.loc[index, 'Running_Tot'] = runtot
df3.loc[index, 'Interest_accr'] = intaccr
df3

相关内容

  • 没有找到相关文章

最新更新