私は、他の列の条件の組み合わせを使用してゼロに設定し、2番目のデータフレームであるcriteriaDFを使用してインデックスを作成するデータフレームmyDFを持っています。Single Positional Indexer out of bounds pandasデータフレームを反復する
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
criteriaDF:これは以下のエラーを与える
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
:
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
myDFは、ループについては、以下を介して実行される
ない0 - - へ> 11.Traceback (most recent call last):
File "", line 1, in runfile('myscript.py', wdir='C:myscript')
File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 880, in runfile execfile(filename, namespace)
File "C:\ProgramData\Anaconda2\lib\site-packages\spyder\utils\site\sitecustomize.py", line 87, in execfile exec(compile(scripttext, filename, 'exec'), glob, loc)
File "myscript.py", line 111, in gross_yield, curtailed_yield, shutdown_loss, df_testing = calculate_loss(input_file, input_shutdownbymonth, shutdown_days) #Returning df for testing/interrogation only. Delete once finished.
File "myscript.py", line 79, in calculate_loss shutdown_hours = range(int(criteriaDF.iloc[month]['STARTTIME']), int(criteriaDF.iloc[month]['ENDTIME']))
File "C:\ProgramData\Anaconda2\lib\site-packages\pandas\core\indexing.py", line 1328, in __getitem__ return self._getitem_axis(key, axis=0)
File "C:\ProgramData\Anaconda2\lib\site-packages\pandas\core\indexing.py", line 1749, in _getitem_axis self._is_valid_integer(key, axis)
File "C:\ProgramData\Anaconda2\lib\site-packages\pandas\core\indexing.py", line 1638, in _is_valid_integer raise IndexError("single positional indexer is out-of-bounds")
IndexError: single positional indexer is out-of-bounds
私は
month = 0
for month in range (0, 12)
は、しかし、これが列1を実行します[「月」]に私のデータフレームのインデックスと適合しない設定した場合、スクリプトの動作が
私の理解が
range (1, 13)
戻り
[1,2,3,4,5,6,7,8,9,10,11,12].
ということであることを確認
また、コードをforループのコードで1行ずつ手動で実行しようとしましたが、12月は12となります。なぜrage(1,13)の月を使用するのが不思議ですか?リストの範囲内(1,13)。
私のコードまたは私のアプローチのエラーは何ですか?