Pythonでデータ分析をするなら、まず覚えるべきライブラリがpandas(パンダス)です。
pandasの中心的なデータ構造であるDataFrame(データフレーム)は、表形式のデータを効率よく操作するための道具です。
DataFrameでできること:
- CSVやExcelファイルの読み書き
- データの集計や加工
- 条件に合ったデータの抽出
- グラフ作成のためのデータ準備
実務で必須の処理がたった数行のコードで実現できます。
この記事では、pandasの基本からDataFrameの実践的な使い方まで、初心者にも分かりやすく解説していきます。
第1章:pandasの導入とDataFrameの作成方法

pandasのインストール(初回のみ)
pip install pandas
DataFrameを作成する方法
辞書から作成(基本的な方法):
import pandas as pd
# データを辞書形式で準備
data = {
"名前": ["田中", "佐藤", "鈴木"],
"年齢": [25, 30, 22],
"職業": ["エンジニア", "デザイナー", "営業"]
}
# DataFrameを作成
df = pd.DataFrame(data)
print(df)
出力結果:
名前 年齢 職業
0 田中 25 エンジニア
1 佐藤 30 デザイナー
2 鈴木 22 営業
リストのリストから作成:
# 2次元リストでも作成可能
data_list = [
["田中", 25, "エンジニア"],
["佐藤", 30, "デザイナー"],
["鈴木", 22, "営業"]
]
df = pd.DataFrame(data_list, columns=["名前", "年齢", "職業"])
空のDataFrameを作成:
# 後からデータを追加する場合
df = pd.DataFrame(columns=["名前", "年齢", "職業"])
第2章:CSVファイルとの読み書き
CSVファイルの読み込み
# 基本的な読み込み
df = pd.read_csv("data.csv")
# 文字化け対策(日本語の場合)
df = pd.read_csv("data.csv", encoding="utf-8")
# 先頭行をカラム名にしない場合
df = pd.read_csv("data.csv", header=None)
CSVファイルへの書き出し
# 基本的な書き出し
df.to_csv("output.csv", index=False)
# 文字化け対策
df.to_csv("output.csv", index=False, encoding="utf-8")
重要なオプション:
index=False
:行番号(インデックス)を出力しないencoding="utf-8"
:日本語の文字化けを防ぐ
Excelファイルとの連携
# Excelファイルの読み込み
df = pd.read_excel("data.xlsx")
# Excelファイルに書き出し
df.to_excel("output.xlsx", index=False)
注意: Excelファイルを扱う場合は、追加でライブラリのインストールが必要です:
pip install openpyxl
第3章:DataFrameの基本操作と確認方法
データの概要を確認
# 最初の数行を表示
df.head() # 先頭5行
df.head(10) # 先頭10行
# 最後の数行を表示
df.tail() # 末尾5行
# データの基本情報
df.info() # 列名、データ型、欠損値の有無など
df.describe() # 数値列の統計情報(平均、標準偏差など)
# データの形状(行数、列数)
print(df.shape) # (行数, 列数)
# 列名の確認
print(df.columns)
特定の列を選択
# 1つの列を選択
names = df["名前"] # Series形式
ages = df["年齢"]
# 複数の列を選択
subset = df[["名前", "職業"]] # DataFrame形式
# 列の順番を変えて選択
reordered = df[["職業", "名前", "年齢"]]
行の抽出
位置による抽出(iloc):
# 特定の行を選択
first_row = df.iloc[0] # 0行目
rows_1_to_3 = df.iloc[1:3] # 1〜2行目(3は含まない)
# 特定の位置の値を取得
value = df.iloc[0, 1] # 0行目1列目の値
ラベルによる抽出(loc):
# インデックスが数値でない場合に便利
df.loc[0] # インデックス0の行
df.loc[0:2] # インデックス0〜2の行
条件による抽出(フィルタリング)
# 年齢が25以上の人を抽出
older_people = df[df["年齢"] >= 25]
# 複数条件の組み合わせ
young_engineers = df[(df["年齢"] < 30) & (df["職業"] == "エンジニア")]
# 特定の値を含む行を抽出
engineers = df[df["職業"] == "エンジニア"]
# 複数の値のいずれかに一致する行
tech_people = df[df["職業"].isin(["エンジニア", "デザイナー"])]
第4章:列・行の追加・削除・変更

新しい列を追加
計算結果を新しい列に:
# 年齢に基づいたカテゴリを追加
df["年齢カテゴリ"] = df["年齢"].apply(lambda x: "若手" if x < 30 else "ベテラン")
# 固定値を追加
df["部署"] = "開発部"
# 複数列の計算結果を追加
# 例:年齢 × 経験年数のような計算
条件に基づいた値の設定:
import numpy as np
# 複雑な条件分岐
df["評価"] = np.where(df["年齢"] >= 30, "シニア",
np.where(df["年齢"] >= 25, "ミドル", "ジュニア"))
行の追加
# 新しい行を末尾に追加
new_row = {"名前": "山本", "年齢": 27, "職業": "マーケター"}
df = df.append(new_row, ignore_index=True)
# または、locを使って追加
df.loc[len(df)] = ["山本", 27, "マーケター"]
列・行の削除
列の削除:
# 列を削除(元のDataFrameは変更されない)
df_new = df.drop("年齢カテゴリ", axis=1)
# 元のDataFrameを直接変更
df.drop("年齢カテゴリ", axis=1, inplace=True)
# 複数列を同時に削除
df.drop(["列名1", "列名2"], axis=1, inplace=True)
行の削除:
# 特定のインデックスの行を削除
df.drop(0, axis=0, inplace=True) # 0行目を削除
# 条件に合う行を削除
df = df[df["年齢"] >= 20] # 年齢20未満の行を除外
データの変更
# 特定のセルの値を変更
df.loc[0, "年齢"] = 26
# 列全体の値を変更
df["職業"] = df["職業"].replace("エンジニア", "システム開発者")
# 複数の値をまとめて置換
df["職業"] = df["職業"].replace({
"エンジニア": "システム開発者",
"デザイナー": "UIデザイナー"
})
第5章:よく使うデータ加工と集計テクニック
グループごとの集計
# 職業ごとの平均年齢
age_by_job = df.groupby("職業")["年齢"].mean()
# 複数の統計値を一度に計算
job_stats = df.groupby("職業")["年齢"].agg(["mean", "min", "max", "count"])
# 複数列での集計
multi_group = df.groupby(["職業", "年齢カテゴリ"]).size()
データの並び替え
# 年齢で昇順ソート
df_sorted = df.sort_values("年齢")
# 年齢で降順ソート
df_sorted = df.sort_values("年齢", ascending=False)
# 複数列でソート
df_sorted = df.sort_values(["職業", "年齢"])
欠損値(NaN)の処理
# 欠損値があるかチェック
print(df.isnull().sum())
# 欠損値がある行を削除
df_clean = df.dropna()
# 欠損値を特定の値で埋める
df_filled = df.fillna("不明")
# 列ごとに異なる値で埋める
df_filled = df.fillna({"名前": "不明", "年齢": 0})
# 前の値で埋める(forward fill)
df_filled = df.fillna(method="ffill")
データの型変換
# 文字列を数値に変換
df["年齢"] = pd.to_numeric(df["年齢"], errors="coerce")
# 日付型に変換
df["入社日"] = pd.to_datetime(df["入社日"])
# カテゴリ型に変換(メモリ効率が良い)
df["職業"] = df["職業"].astype("category")
第6章:実用的な応用例
重複データの処理
# 重複行を確認
duplicates = df.duplicated()
# 重複行を削除
df_unique = df.drop_duplicates()
# 特定の列での重複を削除
df_unique = df.drop_duplicates(subset=["名前"])
データの結合
# 2つのDataFrameを縦に結合
df_combined = pd.concat([df1, df2], ignore_index=True)
# 2つのDataFrameを横に結合
df_merged = pd.merge(df1, df2, on="共通のキー列")
条件に基づく値の変更
# 複雑な条件での値の設定
df.loc[df["年齢"] >= 30, "ステータス"] = "シニア"
df.loc[df["年齢"] < 30, "ステータス"] = "ジュニア"
# 条件に基づく計算
df["年収推定"] = df["年齢"] * 10 # 簡単な例
まとめ:DataFrameを使いこなせば、Pythonでのデータ分析が加速する!
pandasのDataFrameは、表形式データの操作を圧倒的に効率化してくれる強力な道具です。
特に重要な機能:
- データの読み込み・書き出し:CSV、Excelファイルとの連携
- 行列の抽出・加工:必要なデータだけを取り出す
- 条件でのフィルタリング:特定の条件に合うデータを抽出
- グループ集計や統計処理:データの傾向を把握
よく使う機能の早見表
操作 | コマンド | 説明 |
---|---|---|
データ確認 | df.head() | 先頭数行を表示 |
列選択 | df["列名"] | 特定の列を抽出 |
条件抽出 | df[df["列"] > 値] | 条件に合う行を抽出 |
グループ集計 | df.groupby("列").mean() | グループごとの平均 |
ソート | df.sort_values("列") | 指定列で並び替え |
欠損値削除 | df.dropna() | 欠損値がある行を削除 |
最初は覚えることが多く感じるかもしれませんが、実際にデータを触りながら覚えれば必ず身につきま
コメント