1. Pandasとは?
Pandas(Python Data Analysis Library)は、Pythonでデータ分析を行う際に広く使われるライブラリです。特に、表形式のデータを扱うためのDataFrame(データフレーム)
というデータ構造が強力であり、データの読み込み、前処理、集計、可視化などを簡単に行うことができます。
本記事では、Pandasのデータフレームについて初心者向けに詳しく解説し、機械学習においてよく使われる機能とともに説明します。
2. データフレームとは?
データフレームの概要
データフレームは、行と列を持つ表形式のデータ構造で、ExcelのシートやSQLのテーブルに似た形をしています。
- 行(index):データの識別子や番号
- 列(columns):データの種類(変数)
- セル(値):各行と列の交差点にあるデータ
例えば、以下のようなデータを考えてみましょう。
名前 | 年齢 | 身長(cm) | 体重(kg) |
---|---|---|---|
田中 | 25 | 170 | 65 |
鈴木 | 30 | 165 | 70 |
佐藤 | 22 | 175 | 68 |
このようなデータをPythonで扱うために、Pandasのデータフレームを使います。
3. データフレームの作成方法
Pandasのデータフレームを作成するには、pandas.DataFrame()
を使用します。以下の方法で作成できます。
3.1 ExcelやCSVを読み込んでデータフレームを作成
ExcelやCSVファイルからデータを読み込むことは、データ分析の基本です。
import pandas as pd
# CSVファイルを読み込む
df_csv = pd.read_csv("data.csv")
print(df_csv.head())
# Excelファイルを読み込む
df_excel = pd.read_excel("data.xlsx")
print(df_excel.head())
このように、pd.read_csv()
やpd.read_excel()
を使うことで、簡単にデータフレームを作成できます。
3.2 リストを使ってデータフレームを作成
import pandas as pd
data = [
["田中", 25, 170, 65],
["鈴木", 30, 165, 70],
["佐藤", 22, 175, 68]
]
df = pd.DataFrame(data, columns=["名前", "年齢", "身長(cm)", "体重(kg)"])
print(df)
出力:
名前 年齢 身長(cm) 体重(kg)
0 田中 25 170 65
1 鈴木 30 165 70
2 佐藤 22 175 68
3.3 辞書を使ってデータフレームを作成
data = {
"名前": ["田中", "鈴木", "佐藤"],
"年齢": [25, 30, 22],
"身長(cm)": [170, 165, 175],
"体重(kg)": [65, 70, 68]
}
df = pd.DataFrame(data)
print(df)
この方法では、辞書のキーが列名となり、値がそれぞれの列のデータとして格納されます。
4. データの基本操作
4.1 データの確認
データフレームを扱う際に、データの基本的な情報を確認するのは重要です。
print(df.head()) # 先頭5行を表示
print(df.tail()) # 末尾5行を表示
print(df.info()) # データ型や欠損値の確認
print(df.describe()) # 数値データの基本統計量を表示
4.2 列の選択
特定の列を取得するには、以下のようにします。
print(df["名前"]) # 名前の列を取得
print(df[["名前", "年齢"]]) # 名前と年齢の列を取得
4.3 行の選択
iloc
を使ってインデックス番号で行を取得できます。
print(df.iloc[1]) # 1行目のデータを取得
5. 機械学習でよく使うデータフレーム操作
5.1 欠損値の処理
機械学習ではデータに欠損値が含まれていることが多いため、それを処理する必要があります。
# 欠損値の確認
print(df.isnull().sum())
# 欠損値を削除
df = df.dropna()
# 欠損値を平均値で補完
df["年齢"].fillna(df["年齢"].mean(), inplace=True)
5.2 データのフィルタリング
特定の条件に合うデータを抽出できます。
# 年齢が25歳以上のデータを取得
filtered_df = df[df["年齢"] >= 25]
print(filtered_df)
filtered_df = df[df[“年齢”] >= 25] の意味
このフィルタリングでは、 df[df["年齢"]
とdfが2重になっています。この部分に少し解説を追加します。
df["年齢"] >= 25
の部分は、年齢
列に対して「25以上かどうか」を判定するブールSeriesを生成します。これを実行すると、以下のような True
/ False
のSeriesになります。
そして、Pandasでは df[条件]
という書き方をすると、
条件が True
になっている行だけを抽出する という「ブールインデックス」が適用されます。
そのため、Trueになっているデータだけをあらためてdf[]に格納する事で、データの抽出が完了するという事になります。
この結果として、新しいDataFrame filtered_df
には年齢が25以上の行だけが残るわけです。
5.3 データのソート
データを並べ替えることもよくあります。
# 年齢の昇順にソート
sorted_df = df.sort_values(by="年齢", ascending=True)
print(sorted_df)
こちらも先程と似た、エクセルでよくある操作ですが、先ほどと違い、df[]が2重になっていません。
sorted_df = df.sort_values(by="年齢", ascending=True) ではなぜ df[] を使わないのか?
これは、sort_values()
がDataFrame自体をソートして、新しいDataFrameを返すメソッドだからです。