当前位置: 首页 > 知识库问答 >
问题:

单位置索引器越界迭代熊猫数据帧

仉昱
2023-03-14

我有一个数据框架,myDF,其中一列我希望使用来自其他列的条件和索引与第二个数据框架,标准DF的组合设置为零。

myDF.head():

       DateTime  GrossPowerMW USDateTime_string  DateTime_timestamp  \
0  01/01/1998 00:00        17.804  01/01/1998 00:00 1998-01-01 00:00:00   
1  01/01/1998 01:00        18.751  01/01/1998 01:00 1998-01-01 01:00:00   
2  01/01/1998 02:00        20.501  01/01/1998 02:00 1998-01-01 02:00:00   
3  01/01/1998 03:00        22.222  01/01/1998 03:00 1998-01-01 03:00:00   
4  01/01/1998 04:00        24.437  01/01/1998 04:00 1998-01-01 04:00:00   

   Month  Day  Hour  GrossPowerMW_Shutdown  
0      1    3     0                 17.804  
1      1    3     1                 18.751  
2      1    3     2                 20.501  
3      1    3     3                 22.222  
4      1    3     4                 24.437  

标准DF:

       STARTTIME  ENDTIME
Month                    
1            9.0     12.0
2            9.0     14.0
3            9.0     14.0
4            9.0     14.0
5            9.0     13.0
6            9.0     14.0
7            9.0     13.0
8            9.0     12.0
9            9.0     14.0
10           9.0     13.0
11           9.0     13.0
12           9.0     11.0

然后通过以下for循环运行myDF:

month = 1
for month in range (1, 13):
    shutdown_hours = range(int(criteriaDF.iloc[month]['STARTTIME']), int(criteriaDF.iloc[month]['ENDTIME']))
    myDF.loc[(myDF["Month"].isin([month])) & (myDF["Hour"].isin(shutdown_hours)) & (myDF["Day"].isin(shutdown_days)), "GrossPowerMW_Shutdown"] *= 0
    month = month + 1

这会产生以下错误:

回溯(最近一次调用):

文件 “”, 第 1 行, in runfile('myscript.py', wdir='C:myscript')

文件“C:\ program data \ anaconda 2 \ lib \ site-packages \ spyder \ utils \ site \ site customize . py”,第880行,在runfile execfile(文件名,命名空间)中

文件“C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py”,第 87 行,在 execfile exec(compile(scripttext, filename, 'exec'), glob, loc)

文件“myscript.py”,第111行,在gross_yield,curtailed _ yield,shutdown_loss,df _ testing = calculate _ loss(input _ file,input_shutdownbymonth,shut down _ days)#返回df仅用于测试/询问。完成后删除。

文件"myscript.py",第79行,在calculate_lossshutdown_hours=范围(int(criteriaDF.iloc[月]['开始时间']),int(criteriaDF.iloc[月]['结束时间']))

文件“C:\ProgramData\Anaconda2\lib\site packages\pandas\core\indexing.py”,第1328行,__getitem__return self_getitem_axis(键,轴=0)

文件“C:\ program data \ anaconda 2 \ lib \ site-packages \ pandas \ core \ indexing . py”,第1749行,in _getitem_axis self。_is_valid_integer(键,轴)

文件“C:\ProgramData\Anaconda2\lib\site packages\pandas\core\index.py”,第1638行,在_is_valid_integer中引发IndexError(“单位置索引器超出界限”)

IndexError:单位置索引器越界

然而,脚本工作,如果我设置

month = 0
for month in range (0, 12)

然而,这不适合我的数据框的索引列['月']运行1-12而不是0-

确认我的理解是

range (1, 13)

退货

[1,2,3,4,5,6,7,8,9,10,11,12].

我还尝试使用月份 = 12 的 for 循环中的代码逐行手动运行代码。所以我不确定为什么在愤怒中使用月份 (1, 13) 不起作用,请注意 12 是列表范围 (1,13) 中最高的整数。

我的代码或方法中有什么错误?

共有1个答案

郭俊人
2023-03-14

您使用的是iloc,它是“纯粹基于整数位置的索引,用于按位置选择。”所以它只是计算从0到11的行,你应该使用loc,它查看索引的值(所以1到12)

 类似资料:
  • 问题内容: 在我的游戏代码中,我尝试添加一张手牌。一旦我做完了,我的数组就超出了范围。一切看起来都不错,但也许我缺少了一些东西。 仅供参考,一个和两个是Player实例。来自Main类的相关代码(对格式感到抱歉。我很想将其传输到Stack Overflow): 卡类: 玩家等级: 问题答案: 问题出在你的循环上 没有其他任何值可设置,因此此循环不断循环,直到所有玩家拥有超过52张牌为止。一旦某人拥

  • 问题内容: 我有一个数据框,我从其中删除了一些行。结果,我得到一个数据框架,其中的索引是这样的:我想将其重置为。我该怎么做? 以下似乎有效: 以下内容不起作用: 问题答案: 是您要寻找的。如果您不希望将其另存为列,请执行以下操作: 如果您不想重新分配:

  • 问题内容: 假设我用两列(一个DateTime)和一个(整数)创建了一个熊猫DataFrame 。现在,我想根据第一列()中的值创建一个DatetimeIndex : 一切似乎都正常,除了我打印DataFrame时,它说它具有Int64Index。 我是在做错事还是不正确理解Indeces的概念? 问题答案: 没有就位(除非您通过)。否则一切正确 同样作为参考,在即将到来的0.12版本(下周)中,

  • 这是我的代码: 该程序的目的是要求用户输入一个字符串,然后统计字符串中每个字符的使用次数。 当我去编译程序时,它工作正常。当我运行程序时,我可以在弹出框中输入字符串,但是在我提交字符串并按确定后,我得到一个错误,说 我不完全确定问题是什么或如何解决。

  • 这似乎微不足道,但也许我对向量的理解并不是它应该是的。我在这段代码上得到[java.lang.ArrayIndexOutOfBoundsException:Array index out of range:1]。错误发生在第3行。既然look是基于向量的大小,那么数组怎么会越界呢? 方法“getChangeSets()”返回一个列表。该列表最初是作为向量创建的。

  • 我一直在四处寻找是否有任何东西可以帮助我,但我不太了解人们的回答,任何我所了解的似乎都不能解决问题!所以基本上正如标题所说,我得到了一个数组索引越界异常,但我不知道为什么。非常感谢任何帮助。 代码: