【Python】Pandas入門:SeriesとDataFrameの基本構造とilocによるデータ抽出

Pythonでのデータ分析において、デファクトスタンダードとなっているライブラリが Pandas です。Excelのような表形式のデータをプログラム上で柔軟かつ高速に扱うことができ、データの前処理や集計、可視化の準備に欠かせないツールです。

本記事では、Pandasの核となる2つのデータ構造「Series(シリーズ)」と「DataFrame(データフレーム)」の作成方法、および iloc を使用した位置指定によるデータの抽出方法について解説します。

目次

Pandasの主要データ構造と基本操作

Pandasを扱う上で理解しておくべき基本概念は以下の通りです。

  1. Series: 1次元の配列のようなデータ構造。インデックス(ラベル)付きのリストと考えられます。
  2. DataFrame: 2次元の表形式データ構造。行と列を持ち、複数のSeriesが束ねられたものと解釈できます。
  3. Index / Columns: 行の見出し(Index)と列の見出し(Columns)です。
  4. iloc: 行番号や列番号(整数:Integer Location)を指定してデータを取り出す機能です。

以下に、これらを網羅した実装コードを示します。

# 事前に pip install pandas を実行してください
import pandas as pd

def demonstrate_pandas_basics():
    """
    Pandasの基本的なデータ構造と参照方法を示す関数
    """
    print("=== 1. Seriesの作成 ===")
    # リストからSeriesを作成
    # index引数でラベルを明示的に指定
    sales_list = [150, 200, 120]
    dates = ["2023-01-01", "2023-01-02", "2023-01-03"]
    
    series_data = pd.Series(sales_list, index=dates, name="Sales")
    print("--- 作成されたSeries ---")
    print(series_data)
    print(f"型: {type(series_data)}\n")

    print("=== 2. DataFrameの作成 ===")
    # 辞書からDataFrameを作成
    # キーが列名(columns)、値がデータとなります
    shop_data = {
        "Product_A": [100, 120, 150, 130],
        "Product_B": [90, 80, 110, 95],
        "Product_C": [200, 210, 205, 190]
    }
    # 行ラベル(index)を指定して作成
    shop_index = ["Store_Tokyo", "Store_Osaka", "Store_Nagoya", "Store_Fukuoka"]
    
    df = pd.DataFrame(shop_data, index=shop_index)
    
    print("--- 作成されたDataFrame ---")
    print(df)
    print("\n--- 構成要素の確認 ---")
    print(f"Columns (列名): {df.columns.values}")
    print(f"Index (行名): {df.index.values}\n")

    print("=== 3. ilocを用いたデータの抽出 ===")
    # ilocは [行番号, 列番号] でアクセスします(0始まり)
    
    # 例: 1行目(Osaka)のデータすべてを取得
    row_1 = df.iloc[1]
    print(f"--- 1行目のデータ (Store_Osaka) ---\n{row_1}\n")

    # 例: 2行目(Nagoya)の、0列目(Product_A)の値を取得
    val_2_0 = df.iloc[2, 0]
    print(f"--- 2行目, 0列目の値 (Store_Nagoya, Product_A) ---")
    print(f"値: {val_2_0}")

    # 例: スライス機能で範囲指定 (0行目から1行目、1列目から最後まで)
    subset = df.iloc[0:2, 1:]
    print("\n--- 範囲指定による抽出 (0:2行, 1:列) ---")
    print(subset)

if __name__ == "__main__":
    demonstrate_pandas_basics()

実行結果

=== 1. Seriesの作成 ===
--- 作成されたSeries ---
2023-01-01    150
2023-01-02    200
2023-01-03    120
Name: Sales, dtype: int64
型: <class 'pandas.core.series.Series'>

=== 2. DataFrameの作成 ===
--- 作成されたDataFrame ---
               Product_A  Product_B  Product_C
Store_Tokyo          100         90        200
Store_Osaka          120         80        210
Store_Nagoya         150        110        205
Store_Fukuoka        130         95        190

--- 構成要素の確認 ---
Columns (列名): ['Product_A' 'Product_B' 'Product_C']
Index (行名): ['Store_Tokyo' 'Store_Osaka' 'Store_Nagoya' 'Store_Fukuoka']

=== 3. ilocを用いたデータの抽出 ===
--- 1行目のデータ (Store_Osaka) ---
Product_A    120
Product_B     80
Product_C    210
Name: Store_Osaka, dtype: int64

--- 2行目, 0列目の値 (Store_Nagoya, Product_A) ---
値: 150

--- 範囲指定による抽出 (0:2行, 1:列) ---
             Product_B  Product_C
Store_Tokyo         90        200
Store_Osaka         80        210

解説:SeriesとDataFrameの関係

Pandasのデータ構造は、以下のように整理すると理解しやすくなります。

  • Series: データが一列に並んだもの。インデックスを持ちます。
  • DataFrame: 複数のSeriesが横に連結され、共通のインデックスを持ったもの(スプレッドシートやSQLのテーブルに近いイメージ)。

ilocによる整数インデックス参照

データ分析では「特定の位置にあるデータ」を取り出したい場面が多々あります。その際に使用するのが iloc プロパティです。

  • df.iloc[row_index, col_index] の形式で使用します。
  • 通常のPythonリストと同様に、0から始まる整数で位置を指定します。
  • スライス(:)を使用することで、行や列を範囲選択して部分的なDataFrame(サブセット)を作成することも可能です。

まずはこれらの基本操作により、データの読み込みと特定の箇所の確認ができるようになります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次