Python Pandas行方向に周期的にデータを分割して抽出する

 本記事では、pandasデータフレームにて、行方向のデータを等分割する雛形コードを載せました。
 例えば、下図左はアイリスデータセットで150行あります。これを下図右のように例えば、10行ずつに分割したデータフレームを新たに作成してリストへ格納します。

■本プログラム

#!/usr/bin/env python
# coding: utf-8

# In[1]:


import pandas as pd
import numpy as np

df = pd.read_csv('iris-dataset.csv')
df


# In[2]:


df2 = df.copy()

# 分割数
split_num = 10

df_list = []
# Pandas DataFrameを行方向に分割する
while True:
    # 分割数までの行数を抽出する
    df_buf = df2[:split_num]
    
    # インデックスをリセットする。dropをFalseにすることで列名に移動
    df_buf.reset_index(drop = False, inplace = True)
    
    # インデックスを1からに振り直す
    df_buf.index = np.arange(1, len(df_buf) + 1)
    
    # データフレームをリストへ格納
    df_list.append(df_buf)
    
    # 分割数以降の行数をdf2へ格納する
    df2 = df2[split_num:]
    
    # もし、データフレームが空の場合、ループを抜ける
    if df2.empty:
        break

df_list


# In[3]:


# (おまけ)
# インデックスとカラム名を指定して、要素を取得する場合
for i, df_buf in enumerate(df_list, start = 1):
    # 列名「sepal_length」の行番号2と1の要素を引き算する
    val = df_buf.at[2, 'sepal_length'] - df_buf.at[1, 'sepal_length']
    print(i, '{0:.1f}'.format(val))

以上

<広告>