前提・実現したいこと
Pythonにおいて長さ100のDataFrameを、91個の長さ10のDataFrameに分割したいです。
分割後のDataFrameの様子は、元のDataFrameの行番号を099とすると、9のDataFrame
1個目: 行番号が0
2個目: 行番号が110のDataFramen+8のDataFrame
・
・
n個目: 行番号がn-1
・
・
91個目(最後): 行番号が90~99のDataFrame
のようになります。
現在のソースコード
Python
1import pandas as pd 2import numpy as np 3 4length_of_df = 10 5df = pd.DataFrame(np.random.rand(100, 5)) 6for i in range(100): 7 l = length_of_df 8 for start in range(len(df) - l + 1): 9 stop = start + l - 1 10 df = df.loc[start : stop] 11 print(df)
発生している問題
上記のコードに対するoutputが以下のようになっており、
Python
1df = df.loc[start : stop]
のstopが行番号9に固定されてしまっています。
Out
1 0 1 2 3 4 20 0.153793 0.962481 0.717504 0.287884 0.779153 31 0.363384 0.601769 0.245677 0.804652 0.624542 42 0.215894 0.599740 0.320573 0.275128 0.529112 53 0.295138 0.494984 0.890005 0.629905 0.946923 64 0.178760 0.327287 0.629538 0.620193 0.102324 75 0.566159 0.866883 0.096345 0.396161 0.530190 86 0.093056 0.065673 0.495912 0.238379 0.275772 97 0.663116 0.854800 0.788848 0.597375 0.018949 108 0.708484 0.083630 0.573115 0.602056 0.496587 119 0.984709 0.044723 0.637304 0.346227 0.014686 12 0 1 2 3 4 131 0.363384 0.601769 0.245677 0.804652 0.624542 142 0.215894 0.599740 0.320573 0.275128 0.529112 153 0.295138 0.494984 0.890005 0.629905 0.946923 164 0.178760 0.327287 0.629538 0.620193 0.102324 175 0.566159 0.866883 0.096345 0.396161 0.530190 186 0.093056 0.065673 0.495912 0.238379 0.275772 197 0.663116 0.854800 0.788848 0.597375 0.018949 208 0.708484 0.083630 0.573115 0.602056 0.496587 219 0.984709 0.044723 0.637304 0.346227 0.014686 22 0 1 2 3 4 232 0.215894 0.599740 0.320573 0.275128 0.529112 243 0.295138 0.494984 0.890005 0.629905 0.946923 254 0.178760 0.327287 0.629538 0.620193 0.102324 265 0.566159 0.866883 0.096345 0.396161 0.530190 276 0.093056 0.065673 0.495912 0.238379 0.275772 287 0.663116 0.854800 0.788848 0.597375 0.018949 298 0.708484 0.083630 0.573115 0.602056 0.496587 309 0.984709 0.044723 0.637304 0.346227 0.014686 31 0 1 2 3 4 323 0.295138 0.494984 0.890005 0.629905 0.946923 334 0.178760 0.327287 0.629538 0.620193 0.102324 345 0.566159 0.866883 0.096345 0.396161 0.530190 356 0.093056 0.065673 0.495912 0.238379 0.275772 367 0.663116 0.854800 0.788848 0.597375 0.018949 378 0.708484 0.083630 0.573115 0.602056 0.496587 389 0.984709 0.044723 0.637304 0.346227 0.014686 39 0 1 2 3 4 404 0.178760 0.327287 0.629538 0.620193 0.102324 415 0.566159 0.866883 0.096345 0.396161 0.530190 426 0.093056 0.065673 0.495912 0.238379 0.275772 437 0.663116 0.854800 0.788848 0.597375 0.018949 448 0.708484 0.083630 0.573115 0.602056 0.496587 459 0.984709 0.044723 0.637304 0.346227 0.014686 46 0 1 2 3 4 475 0.566159 0.866883 0.096345 0.396161 0.530190 486 0.093056 0.065673 0.495912 0.238379 0.275772 497 0.663116 0.854800 0.788848 0.597375 0.018949 508 0.708484 0.083630 0.573115 0.602056 0.496587 519 0.984709 0.044723 0.637304 0.346227 0.014686 52 0 1 2 3 4 536 0.093056 0.065673 0.495912 0.238379 0.275772 547 0.663116 0.854800 0.788848 0.597375 0.018949 558 0.708484 0.083630 0.573115 0.602056 0.496587 569 0.984709 0.044723 0.637304 0.346227 0.014686 57 0 1 2 3 4 587 0.663116 0.854800 0.788848 0.597375 0.018949 598 0.708484 0.083630 0.573115 0.602056 0.496587 609 0.984709 0.044723 0.637304 0.346227 0.014686 61 0 1 2 3 4 628 0.708484 0.083630 0.573115 0.602056 0.496587 639 0.984709 0.044723 0.637304 0.346227 0.014686 64 0 1 2 3 4 659 0.984709 0.044723 0.637304 0.346227 0.014686 66Empty DataFrame 67Columns: [0, 1, 2, 3, 4] 68Index: [] 69・ 70・ 71中略 72・ 73・ 74Empty DataFrame 75Columns: [0, 1, 2, 3, 4] 76Index: []
試したこと
locのスライスを指定しているコードを以下のように変更してみましたが出力は変わりませんでした。
Python
1df = df.loc[start :] 2df = df.loc[: stop]
この問題を解決し、はじめに述べたようなDataFrameの分割を実現するためにはどのような変更をすれば良いかがわからず困っています。
知見が浅く、周りに頼れる人もいないため、質問させていただくこととしました。
お手数おかけしますが、知恵をお貸しいただけないでしょうか。
よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
Python3 in jupyter notebook
回答2件
あなたの回答
tips
プレビュー