【データ分析入門】 Pandas DataFrameの使い方をマスターしよう!

【データ分析入門】 Pandas DataFrameの使い方をマスターしよう!

こんにちは!
株式会社キカガク 機械学習講師の桑水流です!

今回はデータ分析の際に大活躍する pandas の DataFrame について初心者にもわかりやすく解説します。
基本的な概念や操作を身につけることでデータ分析に関する理解が深まり、業務にも活用できるようになること間違いなしです!

記事の最後にはデータ分析の勉強におすすめのサイトや書籍についての情報を載せていますので、ぜひ活用を意識しながら最後まで読んでみてください!

本記事はこんな方にオススメです
  • DataFrame ってよく聞くけどいまいち理解できない方
  • データ分析を始めてみたいけどデータの扱い方がわからない方
  • データ分析の基本を学びたい方

pandas.DataFrame とは何か?

データ解析のための強力なツール

pandas は Python のデータ分析ライブラリの一つで、データ解析を行うための便利なツールの詰め合わせパックのようなものです。

その中でも DataFrame は以下の図のように行と列で構成される表形式のデータ構造であり、各列は異なるデータ型(数値、文字列、日付など)を持つことができます。

Excel や Google スプレッドシートを使ったことがある人ならイメージがつきやすいと思います。

初心者でも簡単にかつ、直感的にデータを操作することができます。

pandas.DataFrameの構造

3 つの要素で構成されている

PandasDataFrame の構造は、以下の図のように

values : セルに格納されている値

columns : 列のラベル (列に入る数値や文字列の名前)

index : 行のラベル (行の通し番号のようなもの)

の三つの要素から構成されています。

上の三つの要素が DataFrame を扱う際にかなり重要ですので図のイメージを押さえておきましょう。

それでは実際に DataFrame を作成して基本的な使い方について学んでいきましょう!

ここからは python を実行できる環境が必要です。

まだ環境設定ができていない方は以下の記事を参考に、設定不要の GoogleColaboratory を使用してみてください!

無料で簡単に Python 環境を整えることができます!

Google Colab 使い方マニュアル 【Colab 入門】Google Colaboratory とは?使い方・メリットを徹底解説!

pandas.DataFrameの作成方法

DataFrame を作成する際にはいくつか方法があります。

辞書のリスト・辞書からDataFrame を作成

Pythonの辞書を使用してDataFrameを作成する場合、キーが列名となり、値がデータになります。

今回は「名前」・「年齢」・「出身地」をキーにして辞書の作成を行い、DataFrame へと変換しましょう。DataFrame への変換は pandas.DataFrame メソッドを使います。

辞書から DataFrame を作成
import pandas as pd

# 辞書を作成
data = {
    '名前': ['田中', '渡辺', '具志堅'],
    '年齢': [34, 23, 68],
    '出身地': ['大阪', '名古屋', '沖縄']
}

# 辞書を DataFrame 型へ変換
df = pd.DataFrame(data)
df
index名前年齢出身地
0田中34大阪
1渡辺23名古屋
2具志堅68沖縄
実行結果

簡単に DataFrame を作成することができました!

辞書やリストが用意できれば DataFrame の作成は簡単に行うことができます。

python の辞書やリストについて詳しく知りたい方は以下の記事を参考にしてください。

【Python入門】Python のリストとは?代表的なメソッドやタプル・辞書型との違いも紹介! 【Python入門】Python のリストとは?代表的なメソッドやタプル・辞書型との違いも紹介!

Excel, CSV ファイルからの読み込み

実際に業務や学習でよく活用するのが、Excel や CSV 形式で保存されたデータを読み込んで DataFrame を作成する方法です。こちらを覚えておくと実際の業務でも活用しやすいと思います!

以下のコードで簡単に読み込むことができます。

CSV ファイルからの読み込み
# file.csv は自分のファイル名と path を指定
df = pd.read_csv('file.csv')
Excel ファイルからの読み込み
# file.xlsx は自分のファイル名と path を指定
df = pd.read_excel('file.xlsx')

読み込みたいファイルが作業フォルダ内にない場合は、パスを指定する必要があるので注意してください。

パスの指定がわからない方は以下の記事を参考にしてファイルの読み込みにチャレンジしてみてください。

【Google Colaboratory】Google ドライブにマウントし、ファイルへアクセスする方法

自分のローカル環境だけでなくネット上のデータについても以下のように URL を指定することで読み込むことができます。

今回は UCI machine learning repository で公開されているアヤメの花のデータを読み込んでみましょう。

ネット上の CSV ファイルの読み込み
import pandas as pd

# ウェブ上のCSVファイルのURL
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"

# カラム名
column_names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class']

# CSVファイルの読み込み
data = pd.read_csv(url, names=column_names)

# データの最初の5行を表示
data.head(5)
indexsepal_lengthsepal_widthpetal_lengthpetal_widthclass
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
実行結果

アヤメの花のデータを取得することができました。

この方法を使うことで自分でデータを持っていなくてもデータ解析が行えるので、ぜひ練習に活用してみてください!

pandas.DataFrameの操作

ここからは pandasDataFrame を操作する方法について紹介します。

実際の業務ではデータをそのまま使うのではなく、特定のデータを抜き出したり並べ替えたりして使用することが多いので、ここからの操作はしっかりと押さえておきましょう。

データの並び替え

まずはデータの並び替えです。データを年齢などの項目に基づいて並び替えたいな〜って思うことがよくあると思います。

そんな時はsort_values メソッドを使用することで、任意の列を基準に DataFrame を並び替えることができます。

最初に作成した DataFrame を使って並び替えを行ってみましょう。

年齢の列で並び替え
# 辞書を作成
data = {
    '名前': ['田中', '渡辺', '具志堅'],
    '年齢': [34, 23, 68],
    '出身地': ['大阪', '名古屋', '沖縄']
}

# 辞書を DataFrame 型へ変換
df = pd.DataFrame(data)

# '年齢' 列で昇順にソートする
sorted_df = df.sort_values(by='年齢')
sorted_df
index名前年齢出身地
1渡辺23名古屋
0田中34大阪
2具志堅68沖縄
実行結果

上から年齢が若い順にデータを並び替えることができました!

今回は昇順(数字が小さい順)で並び替えましたが、以下のようにsort_values の引数に ascending=False を指定することでデータを降順に並べ替えることができます。

年齢の列で並び替え
# '年齢' 列で降順にソートする
sorted_df = df.sort_values(by='年齢', ascending=False)
sorted_df
index名前年齢出身地
2具志堅68沖縄
0田中34大阪
1渡辺23名古屋
実行結果

データの結合

DataFrame では別々に作成された DataFrame 同士を結合または分割することができます。

データを結合する際には concatmerge を使用します 。

今回は使用機会が多い concat を用いて結合を行います。まずは異なる2つの DataFrame を上下(行方向)へ結合しましょう。

concat を用いたデータの結合
# サンプルデータ
data1 = {
    '名前': ['田中', '渡辺'],
    '年齢': [34, 23],
    '出身地': ['大阪', '名古屋']
}
data2 = {
    '名前': ['具志堅'],
    '年齢': [68],
    '出身地': ['沖縄']
}

# DataFrameの作成
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# 上下に連結 axis=0 : 行方向
concatenated_df = pd.concat([df1, df2], axis=0)

# index をリセットして表示
concatenated_df.reset_index(drop=True)
index名前年齢出身地
0田中34大阪
1渡辺23名古屋
2具志堅68沖縄
実行結果

異なる DataFrame を上下に結合することができましたね!

つぎは横方向(列方向)へ結合を行いましょう。横方向への結合はconcat の引数にaxis=1 を指定します。

concat を用いたデータの結合
# サンプルデータ
data1 = {
    '名前': ['田中', '渡辺', '具志堅'],
    '年齢': [34, 23, 68]
}

data2 = {
    '出身地': ['大阪', '名古屋', '沖縄'],
    '職業': ['教師', 'エンジニア', '医者']
}

# DataFrameの作成
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# 横に連結 axis=1 : 列方向
concatenated_df = pd.concat([df1, df2], axis=1)

# index をリセットして表示
concatenated_df.reset_index(drop=True)
index名前年齢出身地職業
0田中34大阪教師
1渡辺23名古屋エンジニア
2具志堅68沖縄美容師
実行結果

このように concat を使用すると異なる DataFrame 同士を簡単に結合することができるため非常に便利です。

行や列の削除

DataFrame の中から不要な行や列を削除する方法について紹介します。

データ分析ではデータの入っていない行や列を削除したり、解析に不要なデータを削除することがよくありますのでしっかりと押さえておきましょう!

削除する際には drop メソッドを使用します。

こちらはconcat と同様に引数で axis=0 or 1 を指定することで、行方向か列方向か削除の方向を選ぶことができます。(デフォルトは axis=0

任意の列を削除
# サンプルデータ
data = {
    '名前': ['田中', '渡辺', '具志堅'],
    '年齢': [34, 23, 68],
    '出身地': ['大阪', '名古屋', '沖縄'],
    '職業': ['教師', 'エンジニア', '医者']
}

# DataFrame を作成
df = pd.DataFrame(data)

# DataFrame から '職業' の列を削除
df_dropped_column = df.drop('職業', axis=1)

# DataFrame を表示
df_dropped_column
index名前年齢出身地
0田中34大阪
1渡辺23名古屋
2具志堅68沖縄
実行結果

続いては最初の行を削除しましょう。

削除したい行の index 番号を最初の行なら drop(0) と指定することで削除ができます。

任意の列を削除
# サンプルデータ
data = {
    '名前': ['田中', '渡辺', '具志堅'],
    '年齢': [34, 23, 68],
    '出身地': ['大阪', '名古屋', '沖縄'],
    '職業': ['教師', 'エンジニア', '医者']
}

# DataFrame を作成
df = pd.DataFrame(data)

# DataFrame から最初の行を削除
df_dropped_row = df.drop(0)

# DataFrame を表示
df_dropped_row
index名前年齢出身地職業
1渡辺23名古屋エンジニア
2具志堅68沖縄医者
実行結果

行や列の名前を変更

DataFrame は indexcolumns の名称を任意に変更することができます。

任意の列を削除
data = {
    '名前': ['田中', '渡辺', '具志堅'],
    '年齢': [34, 23, 68],
    '出身地': ['大阪', '名古屋', '沖縄']
}

df = pd.DataFrame(data)

# 列名を英語に変更
df.columns = ['Name', 'Age', 'Place_of_origin']

# インデックス名を "row_1", "row_2", "row_3" に変更
df.index = ['row_1', 'row_2', 'row_3']

# 表示
df
indexNameAgePlace_of_origin
row_1田中34大阪
row_2渡辺23名古屋
row_3具志堅68沖縄
実行結果

データの分割

データの分割を行う際にはいくつか方法がありますが最低限覚えておきたい loc , iloc メソッドについて紹介します。

1. loc の使用例

loc任意のラベルに基づいてデータを分割することができます。

今回は ‘年齢’ が 40 歳以上かそれ未満かで DataFrame を分割してみましょう。

loc を用いたデータの結合
# サンプルデータ
data = {
    '名前': ['田中', '渡辺', '具志堅', '佐藤', '鈴木', '高橋', '伊藤', '山本', '中村', '山田'],
    '年齢': [34, 23, 68, 29, 45, 31, 58, 42, 36, 27],
    '出身地': ['大阪', '名古屋', '沖縄', '東京', '福岡', '大阪', '名古屋', '東京', '福岡', '沖縄'],
    '職業': ['教師', 'エンジニア', '美容師', '教師', 'エンジニア', '美容師', '教師', 'エンジニア', '美容師', '教師'],
    '年収(万円)': [500, 300, 1000, 600, 400, 800, 700, 450, 900, 550]
}

# DataFrameの作成
df = pd.DataFrame(data)

# 年齢が40歳以上のデータフレーム
df_over_40 = df.loc[df['年齢'] >= 40]

# 年齢が40歳未満のデータフレーム
df_under_40 = df.loc[df['年齢'] < 40]

print("DataFrame with age >= 40:")
print(df_over_40)
print("\nDataFrame with age < 40:")
print(df_under_40)
実行結果
DataFrame with age >= 40:
    名前  年齢  出身地     職業  年収(万円)
2  具志堅  68   沖縄    美容師    1000
4   鈴木  45   福岡  エンジニア     400
6   伊藤  58  名古屋     教師     700
7   山本  42   東京  エンジニア     450

DataFrame with age < 40:
   名前  年齢  出身地     職業  年収(万円)
0  田中  34   大阪     教師     500
1  渡辺  23  名古屋  エンジニア     300
3  佐藤  29   東京     教師     600
5  高橋  31   大阪    美容師     800
8  中村  36   福岡    美容師     900
9  山田  27   沖縄     教師     550

年齢を基準にして DataFrame を分割することができました!この方法はかなり直感的で便利なのでぜひ押さえておきましょう。

2. iloc の使用例

lociloc は似ていますが、データの指定方法が異なります。

locラベルを指定するのに対し、ilocindex を指定してデータの分割を行います。iloc の ‘i’ は index の ‘i’ と覚えるといいですね!

ではデータを最初の5行と後の5行で分割してみましょう!

: は 「から」を表します。

:5 は最初から 5 行目までを意味しています。5: は 5 行目から最後までを意味します。

iloc を用いたデータの結合
# 最初の5行を含むデータフレーム
df_first_half = df.iloc[:5]

# 残りの行を含むデータフレーム
df_second_half = df.iloc[5:]

print("DataFrame with the first 5 rows:")
print(df_first_half)
print("\nDataFrame with the remaining rows:")
print(df_second_half)
実行結果
DataFrame with the first 5 rows:
    名前  年齢  出身地     職業  年収(万円)
0   田中  34   大阪     教師     500
1   渡辺  23  名古屋  エンジニア     300
2  具志堅  68   沖縄    美容師    1000
3   佐藤  29   東京     教師     600
4   鈴木  45   福岡  エンジニア     400

DataFrame with the remaining rows:
   名前  年齢  出身地     職業  年収(万円)
5  高橋  31   大阪    美容師     800
6  伊藤  58  名古屋     教師     700
7  山本  42   東京  エンジニア     450
8  中村  36   福岡    美容師     900
9  山田  27   沖縄     教師     550

ilocloc を使用することで簡単にデータの分割を行うことができました!

DataFrame から条件を指定して抽出

DataFrame から特定のデータを取り出す際にはいくつか方法があります。

代表的なものとして queryloc などを使う方法があります。

1. query を使用する方法

query は条件式を '年収 >= 600' のように文字列として指定できるため、理解しやすいのが特徴です。

実際のコードは以下のようになります。

query を用いたデータの抽出
data = {
    '名前': ['田中', '渡辺', '具志堅', '佐藤', '鈴木', '高橋', '伊藤', '山本', '中村', '山田'],
    '年齢': [34, 23, 68, 29, 45, 31, 58, 42, 36, 27],
    '出身地': ['大阪', '名古屋', '沖縄', '東京', '福岡', '大阪', '名古屋', '東京', '福岡', '沖縄'],
    '職業': ['教師', 'エンジニア', '美容師', '教師', 'エンジニア', '美容師', '教師', 'エンジニア', '美容師', '教師'],
    '年収': [500, 300, 1000, 600, 400, 800, 700, 450, 900, 550]
}

df = pd.DataFrame(data)

# query() メソッドを使用して年収 600 万円以上をフィルタリング
high_earning = df.query('年収 >= 600')

# 表示
high_earning
index名前年齢出身地職業年収
2具志堅68沖縄美容師1000
3佐藤29東京教師600
5高橋31大阪美容師800
6伊藤58名古屋教師700
8中村36福岡美容師900
実行結果

2. loc を使用する方法

loc を使うと条件に合致するデータのうち特定の列のみを表示させるような複雑な設定も簡単に行うことができます。

loc を用いたデータの抽出
# 年齢が30歳以上のデータに関して、名前と年齢、年収の列のみを選択
filtered_data = df.loc[df['年齢'] >= 30, ['名前', '年齢', '年収']]

# 表示
filtered_data
index名前年齢年収
0田中34500
2具志堅681000
4鈴木45400
5高橋31800
6伊藤58700
7山本42450
8中村36900
実行結果

以上が DataFrame の基本的な操作になります!

さらに発展的なデータ分析を行うためには?

ここまで学んできた知識でデータの作成や操作を行うことができるようになりました。

さらに発展的なデータ分析を行いたい方は以下のサイトや書籍を参考に勉強を進めていただくのがいいと思います!

データ分析の学習におすすめのサイト・書籍

Kaggle

一番のおすすめは実際にデータ分析を行ってみることです。習うより慣れろの精神で実践こそが一番の近道であると私は信じています。

中でも世界で最も有名なデータ分析コンペティションである Kaggle は練習問題やデータセットが豊富なので実践にはもってこいのサイトです!

下の記事を参考にするとつまずくことなくデータ分析を行うことができると思いますので、ぜひ参考にしてみてください!

Kaggle とは 【Kaggle の第一歩目】Kaggle とは?始め方、誰もが通るタイタニック問題、そしてその先へ…!

② データサイエンスの学び方

データ分析やデータサイエンスについて学びたいけどどうやって勉強すればいいかわからない方はぜひこの記事を参考にしてください!

データ分析をビジネスで活用する方法や、どうやって勉強すればいいかわからないという悩みを解決してくれる記事になっています!

データサイエンスとは?ビジネス活用やスキル価値について簡単に解説! データサイエンスとは?ビジネス活用やスキル価値について簡単に解説! 【需要拡大】 データサイエンス学部卒が教える データサイエンスの学び方 【需要拡大】データサイエンス学部卒が教えるデータサイエンスの学び方

③ データサイエンス・データ分析にオススメの書籍

この記事ではデータサイエンスやデータ分析を学ぶために最適な書籍が紹介されていますのでぜひ参考にしてみてください!

【厳選】データサイエンス・データ分析のオススメ本 18 選 – 超定番から隠れた良書まで – 【最新版】AI・機械学習の勉強にオススメな本 10 冊を AI 講師が厳選!

こちらの記事もオススメ

まずは無料で学びたい方・最速で学びたい方へ

まずは無料で学びたい方: Python&機械学習入門コースがおすすめ

Python&機械学習入門コース

AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!

無料で学ぶ

最速で学びたい方:キカガクの長期コースがおすすめ

一生学び放題

続々と転職・キャリアアップに成功中!受講生ファーストのサポートが人気のポイントです!

AI・機械学習・データサイエンスといえばキカガク!
非常に需要が高まっている最先端スキルを「今のうちに」習得しませんか?

無料説明会を週 2 開催しています。毎月受講生の定員がございますので確認はお早めに!

説明会ではこんなことをお話します!
  • 国も企業も育成に力を入れている先端 IT 人材とは
  • キカガクの研修実績
  • 長期コースでの学び方、できるようになること
  • 料金・給付金について
  • 質疑応答