読み込み中...

Pythonとデータフレーム完全ガイド!初心者から上級者への10ステップ

Pythonとデータフレームの完全ガイド Python
この記事は約18分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Pythonを使ってデータ分析を行う際に必須となるのがデータフレームです。

この記事では、Pythonのデータフレームの作り方から詳細な使い方、対処法、注意点、カスタマイズ方法までを10のステップで分かりやすく解説します。

初心者から上級者まで、Pythonデータフレームを理解し、使いこなせるようになるための最高のガイドです。

●Pythonとは

Pythonはシンプルで読みやすいコードを書くことができるプログラミング言語です。

特に、データ解析やAI開発においては非常に人気があり、豊富なライブラリが提供されています。

その中でもデータフレームを扱うライブラリであるpandasは特に重要です。

●データフレームとは

データフレームは、表形式のデータを効率的に扱うためのデータ構造です。

行と列で構成され、各列は異なるデータ型を持つことができます。

データの追加、削除、変更など様々な操作が可能で、データ分析作業を容易にします。

●Pythonでデータフレームを使うための準備

○Pythonのインストール

まず、Pythonをインストールする必要があります。

公式ウェブサイトからダウンロードできます。

Pythonのバージョンは3.xを選択しましょう。

○pandasのインストール

Pythonのデータフレームを扱うためには、pandasというライブラリが必要です。

Pythonがインストールされている状態で、ターミナルやコマンドプロンプトを開き、次のコードを実行することでインストールできます。

pip install pandas

このコードでは、Pythonのパッケージ管理ツールであるpipを使ってpandasをインストールしています。

●Pythonでのデータフレームの作り方

○サンプルコード1:リストからデータフレームを作る

次に、Pythonでのデータフレームの作り方を解説します。

最初はリストからデータフレームを作る方法です。

import pandas as pd

data = [['Tom', 10], ['Nick', 15], ['Juli', 14]]
df = pd.DataFrame(data, columns=['Name', 'Age'])

print(df)

このコードでは、まずpandasをpdという名前でインポートしています。

次に、2次元のリストdataを作成し、そのリストをpandasのDataFrame関数に渡してデータフレームdfを作成しています。

columns引数には列名をリストとして渡しています。

最後に、print関数を使ってデータフレームを出力しています。

実行結果は次のようになります。

  Name  Age
0   Tom   10
1  Nick   15
2  Juli   14

○サンプルコード2:辞書からデータフレームを作る

次に、辞書からデータフレームを作る方法を解説します。

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'Juli'], 'Age': [10, 15, 14]}
df = pd.DataFrame(data)

print(df)

このコードでは、辞書dataを作成し、その辞書をpandasのDataFrame関数に渡してデータフレームdfを作成しています。

辞書のキーが列名となり、値がその列のデータとなります。

実行結果は次のようになります。

  Name  Age
0   Tom   10
1  Nick   15
2  Juli   14

以上、Pythonでのデータフレームの作り方について解説しました。

データフレームは、リストや辞書から簡単に作成できます。

その他にも、CSVやExcelファイルからデータフレームを作成することも可能です。

●データフレームの基本的な操作

○サンプルコード3:データの選択

次に、データフレームから特定のデータを選択する方法を解説します。

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'Juli'], 'Age': [10, 15, 14]}
df = pd.DataFrame(data)

# 列を選択
print(df['Name'])

# 行を選択
print(df.loc[1])

このコードでは、まず辞書からデータフレームを作成しています。

その後、列名を指定することで特定の列を選択しています。

また、.loc属性を使うことで特定の行を選択しています。

実行結果は次のようになります。

0     Tom
1    Nick
2    Juli
Name: Name, dtype: object
Name    Nick
Age       15
Name: 1, dtype: object

○サンプルコード4:データの並び替え

データフレームでは、データを特定の条件で並び替えることも可能です。

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'Juli'], 'Age': [10, 15, 14]}
df = pd.DataFrame(data)

# Ageで並び替え
df_sorted = df.sort_values('Age')

print(df_sorted)

このコードでは、sort_values関数を使って、’Age’の列に基づいてデータを並び替えています。

実行結果は次のようになります。

  Name  Age
0   Tom   10
2  Juli   14
1  Nick   15

これで、データフレームの基本的な操作について解説しました。

データの選択や並び替えなど、データフレームでは多様な操作を行うことができます。

これから、データフレームでのデータ分析、応用例、注意点、カスタマイズ方法について詳しく解説していきます。

●データフレームでのデータ分析

データフレームは、データの整理だけでなく、データの分析にも非常に便利です。

pandasは基本的な統計量の計算やデータのフィルタリングなど、データ分析に必要な機能を多数提供しています。

○サンプルコード5:基本統計量の算出

pandasのデータフレームでは、データの基本統計量を簡単に算出することができます。

下記のコードでは、各列の平均値、標準偏差、最小値、最大値などを一度に算出しています。

import pandas as pd

data = {'Score': [85, 90, 78, 92, 88], 'Age': [20, 21, 19, 22, 20]}
df = pd.DataFrame(data)

# 基本統計量の算出
print(df.describe())

このコードでは、describeメソッドを使ってデータフレームの基本統計量を算出しています。

describeメソッドは、数値データの列について、基本統計量をまとめて計算する便利なメソッドです。

実行結果は次のようになります。

           Score        Age
count   5.000000   5.000000
mean   86.600000  20.400000
std     5.507571   1.140175
min    78.000000  19.000000
25%    85.000000  20.000000
50%    88.000000  20.000000
75%    90.000000  21.000000
max    92.000000  22.000000

このように、describeメソッドを使うことで、データの全体的な傾向を簡単に把握することができます。

○サンプルコード6:データのフィルタリング

また、特定の条件を満たすデータだけを選び出す、いわゆるデータのフィルタリングも容易に行えます。

下記のコードでは、スコアが90点以上のデータだけを選び出しています。

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'Juli', 'John', 'Sam'], 'Score': [85, 90, 78, 92, 88]}
df = pd.DataFrame(data)

# スコアが90以上のデータをフィルタリング
high_score_df = df[df['Score'] >= 90]

print(high_score_df)

このコードでは、ブールのインデックスを使ってデータをフィルタリングしています。

df['Score'] >= 90は、スコアが90以上の場合はTrue、そうでない場合はFalseのブールのリストを返します。

そして、このブールのリストをデータフレームのインデックスとして渡すことで、Trueの行だけを選択します。

実行結果は次のようになります。

   Name  Score
1  Nick     90
3  John     92

このように、データフレームでは簡単にデータをフィルタリングできます。

これにより、条件を満たすデータだけに注目して分析を進めることができます。

●データフレームの応用例

Pythonのデータフレームでは、データの前処理や分析を一歩進めて、より複雑な操作を行うことも可能です。

今回は欠損値の処理、データの結合、データのグループ化、そしてデータの可視化について説明します。

○サンプルコード7:欠損値の処理

データ分析を行う際には、データ内に存在する欠損値(値が入っていないところ)を適切に処理することが必要です。

次のコードは欠損値を持つデータフレームを作成し、その欠損値を平均値で補完する例です。

import pandas as pd
import numpy as np

data = {'Score': [85, np.nan, 78, np.nan, 88], 'Age': [20, 21, np.nan, 22, 20]}
df = pd.DataFrame(data)

# 欠損値を平均値で補完
df.fillna(df.mean(), inplace=True)

print(df)

このコードでは、’Score’と’Age’の2つの列を持つデータフレームを作成し、その中にnp.nanを用いて欠損値を設定しています。

そして、fillnaメソッドを使って、各列の平均値(df.mean())で欠損値を補完しています。

実行結果は次のようになります。

   Score   Age
0   85.0  20.0
1   83.666667  21.0
2   78.0  21.0
3   83.666667  22.0
4   88.0  20.0

このように、fillnaメソッドを使うことで、欠損値を簡単に補完することができます。

○サンプルコード8:データの結合

データ分析を行う際には、複数のデータフレームを結合することがしばしばあります。

pandasでは、mergeconcatといったメソッドを用いて、簡単にデータフレームを結合することができます。

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2']},
                   index=['K0', 'K1', 'K2'])

df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
                    'D': ['D0', 'D1', 'D2']},
                   index=['K0', 'K2', 'K3'])

# データの結合
result = pd.concat([df1, df2], axis=1)

print(result)

このコードでは、concatメソッドを使って2つのデータフレーム(df1とdf2)を結合しています。

ここで、axis=1を指定することで、列方向に結合することができます。

実行結果は次のようになります。

     A    B    C    D
K0  A0   B0   C0   D0
K1  A1   B1  NaN  NaN
K2  A2   B2   C1   D1
K3 NaN  NaN   C2   D2

このように、pandasのデータフレームでは、簡単に複数のデータフレームを結合することができます。

○サンプルコード9:データのグループ化

データを特定の条件でグループ化し、各グループの平均値や合計値を計算することは、データ分析でよく行われます。

下記のコードは、データフレームを特定の列でグループ化し、各グループの平均値を計算する例です。

import pandas as pd

data = {'Company':['GOOG','GOOG','MSFT','MSFT','FB','FB'],
        'Person':['Sam','Charlie','Amy','Vanessa','Carl','Sarah'],
        'Sales':[200,120,340,124,243,350]}

df = pd.DataFrame(data)

# 'Company'でグループ化して平均を求める
grouped = df.groupby('Company').mean()

print(grouped)

このコードでは、’Company’という列でデータをグループ化し、groupbyメソッドを使って各グループの’Sales’の平均値を計算しています。

実行結果は次のようになります。

         Sales
Company       
FB       296.5
GOOG     160.0
MSFT     232.0

このように、groupbyメソッドを使うことで、データを特定の列でグループ化し、各グループの統計量を計算することができます。

○サンプルコード10:データの可視化

データ分析において、データの可視化は非常に重要なステップです。

データフレームはmatplotlibやseabornなどのライブラリと組み合わせることで、簡単にデータの可視化を行うことができます。

import pandas as pd
import matplotlib.pyplot as plt

data = {'Year': [2015, 2016, 2017, 2018, 2019],
        'Sales': [200, 210, 220, 230, 240]}

df = pd.DataFrame(data)

df.plot(x='Year', y='Sales', kind='bar')
plt.show()

このコードでは、’Year’をx軸、’Sales’をy軸にした棒グラフを作成しています。

pandasのplotメソッドを使って、簡単にグラフを作成することができます。

このグラフを表示すると、年度別の販売量を視覚的に理解することができます。

このようにデータフレームと可視化ライブラリを組み合わせることで、データの傾向を掴みやすくなります。

●データフレームの注意点と対処法

Pythonのデータフレームは、多くのデータ処理に対応可能な強力なツールですが、使用に際してはいくつかの注意点があります。

それぞれの注意点とその対処法について、具体的なサンプルコードとともに説明します。

○注意点1:データ型の違いによるエラー

Pythonのデータフレームでは、異なるデータ型を持つデータを一つのデータフレーム内に格納することが可能ですが、これが原因で意図しないエラーが発生することがあります。

下記のサンプルコードでは、整数と文字列を持つデータフレームを作成し、それぞれの列の合計値を計算しています。

import pandas as pd

data = {'A': [1, 2, 3], 'B': ['4', '5', '6']}
df = pd.DataFrame(data)

print(df['A'].sum())
print(df['B'].sum())

このコードでは、’A’列は整数、’B’列は文字列となっています。

それぞれの列の合計値をsumメソッドで計算しますが、’B’列の合計値計算結果は文字列の結合となり、意図した計算結果と異なります。

6
456

対処法としては、データフレームを作成する前に、または作成後にデータの型を適切なものに変換しておくことが重要です。

下記のサンプルコードでは、astypeメソッドを使って’B’列のデータを整数に変換し、再度合計値を計算します。

df['B'] = df['B'].astype(int)
print(df['B'].sum())

このコードを実行すると、’B’列の合計値は15となり、意図した計算結果になります。

15

○注意点2:インデックスによるエラー

データフレームでは、各行には一意のインデックスが割り当てられています。

インデックスを正しく理解し、適切に操作することが重要です。

下記のサンプルコードでは、reset_indexメソッドを使ってインデックスをリセットし、新たにデータフレームを作成します。

import pandas as pd

data = {'A': [1, 2, 3]}
df = pd.DataFrame(data, index=['a', 'b', 'c'])

df_reset = df.reset_index()
print(df_reset)

このコードを実行すると、新たに生成されたデータフレームでは元のインデックスが一つの列として含まれ、新しいインデックスが生成されます。

  index  A
0     a  1
1     b  2
2     c  3

このように、インデックス操作には注意が必要です。

具体的な対処法としては、インデックスをリセットする際に、drop=Trueを指定することで、元のインデックスを削除することができます。

df_reset = df.reset_index(drop=True)
print(df_reset)

このコードを実行すると、元のインデックスが削除されたデータフレームが生成されます。

   A
0  1
1  2
2  3

●データフレームのカスタマイズ方法

データフレームはその強力な機能と自由度の高さから、多様なカスタマイズが可能です。

ここでは、代表的なデータフレームのカスタマイズ方法について、サンプルコードとともに解説します。

○カスタマイズ1:列名の変更

データフレームでデータの取り扱いを行う際、列名の変更はよく行われる作業の一つです。

renameメソッドを使用して、列名を変更することができます。

下記のサンプルコードでは、列名’A’を’Z’に変更する操作を行っています。

import pandas as pd

data = {'A': [1, 2, 3]}
df = pd.DataFrame(data)

df = df.rename(columns={'A': 'Z'})
print(df)

このコードでは、renameメソッドを使って列名を変更しています。

引数には、辞書形式で「現在の列名:新しい列名」を指定します。この例では、列名’A’を’Z’に変更しています。

コードを実行すると、次のように列名が’Z’に変更されたデータフレームが出力されます。

   Z
0  1
1  2
2  3

○カスタマイズ2:行と列の並び替え

データフレームでは、sort_valuesメソッドとsort_indexメソッドを使って、行や列の並び替えを行うことができます。

下記のサンプルコードでは、sort_valuesメソッドを使って行を並び替え、sort_indexメソッドを使って列を並び替えています。

import pandas as pd

data = {'B': [2, 1, 3], 'A': ['b', 'a', 'c']}
df = pd.DataFrame(data)

df_sorted = df.sort_values('B')
print(df_sorted)

df_sorted = df_sorted.sort_index(axis=1)
print(df_sorted)

このコードでは、sort_valuesメソッドを使って’B’列の値に基づいて行を昇順に並び替えています。

その後、sort_indexメソッドを使って列をインデックス(列名)の順に並び替えています。

コードを実行すると、次のように行と列が並び替えられたデータフレームが出力されます。

   B  A
1  1  a
0  2  b
2  3  c

これらのカスタマイズは、データ解析の途中で行うことが多いです。

適切に利用することで、データ解析の作業効率を大幅に向上させることができます。

まとめ

ここまで、「Pythonとデータフレーム完全ガイド:初心者から上級者への10ステップ」を一緒に学んできました。

初心者から上級者まで、Pythonのデータフレームの作り方から詳細な使い方、対処法、注意点、カスタマイズ方法までを十分に理解し、実践的なスキルを身につけることができたことと思います。

データフレームはPythonのpandasライブラリが提供する強力なデータ構造で、データ分析作業を効率的に行うための多様な機能を提供しています。

データの取り扱いや操作、可視化から、データのカスタマイズといった高度な操作まで、データフレームはその自由度と汎用性で私たちの最良のパートナーです。

このガイドを通じて、データフレームの基本的な作成方法や、行と列の操作、欠損値の処理、データのフィルタリングや集約、そしてカスタマイズ方法を学び、Pythonとデータフレームを使いこなす力を身につけました。

そして最も大切なことは、これらの知識を使って自身のデータ解析のプロジェクトに活かすことです。

日々のデータ解析作業にデータフレームをどう活用するかは、それぞれのプロジェクトや目的により異なりますが、このガイドがその一助となることを願っています。

それでは、今後のデータ解析の旅が皆さんにとって有意義なものとなることを祈って、「Pythonとデータフレーム完全ガイド」を締めくくります。

今回学んだことを忘れずに、そして常に新たな知識を求めて前進し続けてください。