Pythonでのデータ分析において、デファクトスタンダードとなっているライブラリが Pandas です。Excelのような表形式のデータをプログラム上で柔軟かつ高速に扱うことができ、データの前処理や集計、可視化の準備に欠かせないツールです。
本記事では、Pandasの核となる2つのデータ構造「Series(シリーズ)」と「DataFrame(データフレーム)」の作成方法、および iloc を使用した位置指定によるデータの抽出方法について解説します。
目次
Pandasの主要データ構造と基本操作
Pandasを扱う上で理解しておくべき基本概念は以下の通りです。
- Series: 1次元の配列のようなデータ構造。インデックス(ラベル)付きのリストと考えられます。
- DataFrame: 2次元の表形式データ構造。行と列を持ち、複数のSeriesが束ねられたものと解釈できます。
- Index / Columns: 行の見出し(Index)と列の見出し(Columns)です。
- 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(サブセット)を作成することも可能です。
まずはこれらの基本操作により、データの読み込みと特定の箇所の確認ができるようになります。
