Pandas DataFrame の概要
Pandas は Python 環境で広く利用されるデータ分析ライブラリであり、その中核をなす DataFrame は二次元の表形式データ構造です。Excel のスプレッドシートに類似しており、行と列で構成されます。各列には整数、浮動小数点数、文字列など異なるデータ型を割り当てることが可能で、各行には固有のインデックス識別子が付与されます。
DataFrame の生成方法
DataFrame オブジェクトは、CSV ファイルからの読み込みだけでなく、Python の辞書型データを用いて直接構築することもできます。以下の例では、商品情報を含むデータを定義しています。
import pandas as pd
inventory = {
'product_name': ['Notebook', 'Mouse', 'Keyboard'],
'price': [1200, 500, 800],
'stock': [50, 100, 75]
}
table = pd.DataFrame(inventory)
print(table)
実行結果は以下の通りになります。
product_name price stock
0 Notebook 1200 50
1 Mouse 500 100
2 Keyboard 800 75
要素へのアクセス手法
特定の値を取得するには、loc[] メソッドを使用します。これはインデックスラベルと列名を指定してアクセスする方法です。
print(table.loc[0, 'price'])
出力:
1200
一方、iloc[] メソッドは整数の位置情報に基づいて値を取得します。例えば、2 行目の 1 列目を取得する場合は以下のようになります。
print(table.iloc[1, 0])
出力:
Mouse
単一の値を高速に取得する必要がある場合、at[] や iat[] を利用することも可能です。これらは loc や iloc よりもパフォーマンスに優れていますが、単一要素のアクセスに限定されます。
Excel 読み込みと主要操作
外部ファイルからの読み込みや、データ加工に関する頻出操作をまとめます。パス指定や型変換オプションを含めた読み込み処理の例です。
import pandas as pd
file_path = './data/report.xlsx'
# A 列を文字列として読み込む設定
dataset = pd.read_excel(file_path, sheet_name='Sheet1', header=0, converters={'A': str})
データ構造の確認や排序、結合などの操作は以下のように記述します。
dataset.index # インデックスの確認
dataset.values # 数值データの取得
dataset.sort_index() # インデックス基準の排序
dataset.sort_values() # 値基準の排序
dataset.head(5) # 上位 5 行の表示
dataset.tail(3) # 下位 3 行の表示
dataset.shape # 行数と列数の取得 (m, n) = dataset.shape
dataset.isnull() # 欠損値の確認
dataset.columns # 列名の取得
# データの結合
pd.merge(dataset1, dataset2, on='key_column', how='left')
pd.concat([dataset1, dataset2]) # 縦方向などの結合
# ピボットテーブルの作成
pd.pivot_table(dataset, values='price', index='category', aggfunc='sum')
# インデックスのリセット
dataset.reset_index()
dataset.reindex(columns=['col1', 'col2'], fill_value=0)
# 列の抽出
col_series = dataset['product_name'] # Series 形式
col_frame = dataset[['product_name']] # DataFrame 形式
multi_cols = dataset[['price', 'stock']] # 複数列の抽出
# 行の抽出
row_data = dataset.loc[0] # 指定行
subset = dataset.loc[:, ['price', 'stock']]# 全行・指定列
# 欠損値処理
dataset.notnull() # 非欠損値の判定
dataset.dropna() # 欠損値を含む行の削除
dataset.dropna(axis=1) # 欠損値を含む列の削除
dataset.dropna(how='all') # 全てが欠損値の行を削除
dataset.fillna(0) # 欠損値を 0 で埋める
dataset.fillna(method='ffill') # 前の値で埋める(前方補完)
dataset.fillna(method='bfill', limit=1) # 後の値で埋める(後方補完・制限あり)
# 値の置換
dataset.replace(100, 200) # 100 を 200 に置換
# 文字列処理(特定の列に対して)
dataset['product_name'] = dataset['product_name'].str.strip()