首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >KeyError: 1 python中的代码-无法解决此问题

KeyError: 1 python中的代码-无法解决此问题
EN

Stack Overflow用户
提问于 2018-07-08 23:54:10
回答 1查看 4K关注 0票数 1

这段代码曾经有效,但现在不起作用了。我怎么也找不出哪里出了问题。我猜它与for循环有关,但仅此而已。

代码语言:javascript
运行
复制
import pandas as pd

LastFY = 2017
n = 15

DeclRate = 0.1
Res = 442.364
LFY_Vol = 27.8

Col_Names = ['Year', 'Reserves', 'Prod']
df = pd.DataFrame(columns=Col_Names)
df_add = pd.DataFrame(columns=Col_Names)

df['Year'] = [LastFY]
df['Prod'] = [LFY_Vol]
df['Reserves'] = [Res]

for i in range(1, n+1):

    FY = df['Year'][i-1] + 1
    if df['Prod'][i-1] * (1 - DeclRate) > df['Reserves'][i-1]:
    Prod_A = df['Reserves'][i-1]
    else:
        Prod_A = df['Prod'][i-1] * (1 - DeclRate) if i < n else df['Reserves'][i-1]
    Reserves_A = df['Reserves'][i-1] - Prod_A

    df_add['Year'] = [FY]
    df_add['Reserves'] = [Reserves_A]
    df_add['Prod'] = [Prod_A]

df = df.append(df_add, ignore_index=True)
df.round(0).style

谢谢。

下面是我得到的错误代码...

代码语言:javascript
运行
复制
runfile('C:/Users.../TEST.py', wdir='C:/Users...')
Traceback (most recent call last):

  File "<ipython-input-175-365e0e41c561>", line 1, in <module>
    runfile('C:/Users.../TEST.py', wdir='C:/Users...')

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
    execfile(filename, namespace)

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users.../TEST.py", line 22, in <module>
    FY = df['Year'][i-1] + 1

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\series.py", line 623, in __getitem__
    result = self.index.get_value(self, key)

  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 2560, in get_value
    tz=getattr(series.dtype, 'tz', None))

  File "pandas/_libs/index.pyx", line 83, in pandas._libs.index.IndexEngine.get_value

  File "pandas/_libs/index.pyx", line 91, in pandas._libs.index.IndexEngine.get_value

  File "pandas/_libs/index.pyx", line 139, in pandas._libs.index.IndexEngine.get_loc

  File "pandas/_libs/hashtable_class_helper.pxi", line 811, in pandas._libs.hashtable.Int64HashTable.get_item

  File "pandas/_libs/hashtable_class_helper.pxi", line 817, in pandas._libs.hashtable.Int64HashTable.get_item

KeyError: -1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-09 00:04:43

您已经按如下方式定义了n

代码语言:javascript
运行
复制
n = 15

然后定义一个包含一行的数据帧:

代码语言:javascript
运行
复制
print(df)

   Year  Reserves  Prod
0  2017   442.364  27.8

然后遍历range(1, 16)

代码语言:javascript
运行
复制
for i in range(1, n+1):
    FY = df['Year'][i-1] + 1

但是,由于您的数据帧只有一行索引为0,因此df['Year'][1]将返回KeyError。这正是您应该预料到的。

你还没有解释你想要实现的目标。您可能希望在a new question中执行此操作。上面的解释描述了为什么你得到了你的错误。一般来说,print是一个很有用的函数,可以用来确定每个阶段发生了什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51233714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档