pandas pypi インストール方法と基本操作:データ分析の必須ライブラリ

Pandas: データ分析の必須ライブラリ – インストールから基本操作、応用まで徹底解説

Pandasは、Pythonでデータ分析を行う上で欠かせない、強力で柔軟なライブラリです。表形式のデータ操作に特化しており、データの読み込み、クリーニング、変換、分析、そして可視化まで、データ分析のワークフロー全体を効率的にサポートします。この記事では、Pandasのインストール方法から基本操作、応用までを網羅的に解説し、データ分析の基礎を固めるお手伝いをします。

目次

  1. Pandasとは?

    • 1.1 Pandasの概要と特徴
    • 1.2 なぜPandasを使うのか?
    • 1.3 Pandasの主なデータ構造:SeriesとDataFrame
  2. Pandasのインストール

    • 2.1 pipによるインストール
    • 2.2 condaによるインストール
    • 2.3 インストール後の確認
  3. Pandasの基本操作

    • 3.1 DataFrameの作成
      • 3.1.1 リストからの作成
      • 3.1.2 NumPy配列からの作成
      • 3.1.3 辞書からの作成
      • 3.1.4 CSVファイルからの読み込み
      • 3.1.5 その他のファイル形式からの読み込み
    • 3.2 DataFrameの確認
      • 3.2.1 head()とtail()
      • 3.2.2 info()
      • 3.2.3 describe()
      • 3.2.4 shape
      • 3.2.5 dtypes
    • 3.3 データへのアクセス
      • 3.3.1 列の選択
      • 3.3.2 行の選択(ラベルベースのlocと位置ベースのiloc)
      • 3.3.3 条件によるデータの抽出
    • 3.4 データの操作
      • 3.4.1 列の追加と削除
      • 3.4.2 行の追加と削除
      • 3.4.3 データのソート
      • 3.4.4 データのフィルタリング
      • 3.4.5 データの更新
    • 3.5 欠損値の処理
      • 3.5.1 欠損値の確認 (isnull() と notnull())
      • 3.5.2 欠損値の削除 (dropna())
      • 3.5.3 欠損値の補完 (fillna())
  4. Pandasのデータ分析応用

    • 4.1 グルーピングと集計 (groupby())
      • 4.1.1 基本的なグルーピング
      • 4.1.2 複数の列によるグルーピング
      • 4.1.3 集計関数の適用 (sum, mean, count, etc.)
      • 4.1.4 カスタム集計関数の適用
    • 4.2 データの結合 (merge, join, concat)
      • 4.2.1 merge: データベースのような結合
      • 4.2.2 join: インデックスによる結合
      • 4.2.3 concat: データの連結
    • 4.3 ピボットテーブル (pivot_table())
      • 4.3.1 ピボットテーブルの作成
      • 4.3.2 複数インデックスと複数カラムの使用
      • 4.3.3 集計関数のカスタマイズ
    • 4.4 時系列データの処理
      • 4.4.1 日付データの読み込みと変換
      • 4.4.2 リサンプリング
      • 4.4.3 ローリングウィンドウ分析
  5. Pandasと可視化

    • 5.1 Matplotlibとの連携
    • 5.2 Seabornとの連携
    • 5.3 データの可視化例
  6. Pandasのパフォーマンス

    • 6.1 ベクトル化演算の活用
    • 6.2 データ型の最適化
    • 6.3 メモリ使用量の削減
  7. Pandasの学習リソース

    • 7.1 公式ドキュメント
    • 7.2 オンラインコース
    • 7.3 書籍
  8. まとめと今後の展望


1. Pandasとは?

1.1 Pandasの概要と特徴

Pandasは、Pythonでデータ分析を行うためのオープンソースライブラリです。Wes McKinneyによって開発され、NumPyの上に構築されています。Pandasは、柔軟で表現力豊かなデータ構造を提供し、ラベル付きの軸(行と列)を持つデータを簡単に操作できるように設計されています。

Pandasの主な特徴は以下の通りです。

  • 強力なデータ構造: Series (1次元) と DataFrame (2次元) という、ラベル付きの軸を持つ強力なデータ構造を提供します。
  • データの操作と変換: データのクリーニング、変換、結合、リシェイプなど、様々なデータ操作を簡単に行うことができます。
  • 欠損値の処理: 欠損値の処理に特化した機能を提供し、データ分析における課題を解決します。
  • データの入出力: CSV、Excel、SQLデータベース、JSONなど、様々なファイル形式からデータを読み込んだり、書き出したりすることができます。
  • 時系列データのサポート: 時系列データの処理に特化した機能を提供し、日付や時刻に関連するデータの分析を容易にします。
  • NumPyとの統合: NumPyを基盤としているため、NumPyの強力な数値計算機能を利用できます。
  • MatplotlibやSeabornとの連携: データの可視化を容易にするために、MatplotlibやSeabornなどのライブラリと連携できます。

1.2 なぜPandasを使うのか?

Pandasは、データ分析を行う上で非常に強力なツールです。従来のPythonのリストや辞書だけでは扱いにくい、複雑なデータ構造や操作を効率的に扱うことができます。具体的には、以下のような場合にPandasが役立ちます。

  • 表形式データの分析: CSVファイルやExcelファイルなどの表形式データを読み込み、分析したい場合。
  • 欠損値の処理: データに欠損値が含まれており、適切な方法で処理したい場合。
  • データのクリーニングと変換: データの形式を整えたり、不要なデータを取り除いたりしたい場合。
  • データの結合と集計: 複数のデータを結合したり、特定の条件でデータを集計したりしたい場合。
  • 時系列データの分析: 日付や時刻に関連するデータを分析したい場合。
  • 複雑なデータ操作: 複数の条件に基づいてデータを抽出したり、変換したりしたい場合。

これらの操作を、シンプルかつ直感的なコードで実現できるのが、Pandasの大きな魅力です。

1.3 Pandasの主なデータ構造:SeriesとDataFrame

Pandasには、SeriesとDataFrameという2つの主要なデータ構造があります。これらは、Pandasのすべての操作の基礎となるものです。

  • Series: 1次元のラベル付き配列で、任意のデータ型(整数、浮動小数点数、文字列、Pythonオブジェクトなど)を保持できます。Seriesは、NumPyのndarrayに似ていますが、明示的なインデックスを持つ点が異なります。インデックスは、データの各要素に名前を付けるために使用されます。

  • DataFrame: 2次元のラベル付きデータ構造で、複数のSeriesが列として配置されたものです。DataFrameは、表形式のデータ(スプレッドシートやSQLテーブルなど)を表現するのに適しています。各列は異なるデータ型を持つことができ、行と列の両方にラベル(インデックスとカラム名)が付いています。

SeriesとDataFrameは、データ分析における様々な操作を効率的に行うための基盤となります。これらのデータ構造を理解し、使いこなすことが、Pandasをマスターする上で非常に重要です。


2. Pandasのインストール

Pandasを使用するには、まずインストールする必要があります。Pythonには、パッケージをインストールするためのツールがいくつかありますが、最も一般的なのはpipとcondaです。

2.1 pipによるインストール

pipは、Pythonの標準的なパッケージ管理システムです。以下のコマンドをターミナルまたはコマンドプロンプトで実行すると、Pandasをインストールできます。

bash
pip install pandas

このコマンドは、PyPI (Python Package Index) から最新バージョンのPandasをダウンロードし、インストールします。

2.2 condaによるインストール

condaは、Anacondaディストリビューションに付属するパッケージ管理システムです。Anacondaを使用している場合は、以下のコマンドでPandasをインストールできます。

bash
conda install pandas

condaは、pipと同様にパッケージをダウンロードしてインストールしますが、環境の管理に優れているため、依存関係の競合を回避しやすいという利点があります。

2.3 インストール後の確認

Pandasが正しくインストールされたことを確認するには、Pythonインタプリタを起動し、以下のコードを実行します。

python
import pandas as pd
print(pd.__version__)

このコードは、Pandasをインポートし、バージョン番号を出力します。バージョン番号が表示されれば、Pandasが正しくインストールされていることが確認できます。


3. Pandasの基本操作

Pandasをインストールしたら、実際にデータ分析を始めることができます。ここでは、Pandasの基本操作について詳しく解説します。

3.1 DataFrameの作成

DataFrameは、Pandasの中心となるデータ構造です。DataFrameを作成する方法はいくつかあります。

3.1.1 リストからの作成

Pythonのリストを使ってDataFrameを作成することができます。

“`python
import pandas as pd

data = [[‘Alice’, 25, ‘Engineer’], [‘Bob’, 30, ‘Doctor’], [‘Charlie’, 28, ‘Teacher’]]
df = pd.DataFrame(data, columns=[‘Name’, ‘Age’, ‘Profession’])
print(df)
“`

このコードは、リストdataからDataFrameを作成し、列名をName, Age, Professionに設定します。

3.1.2 NumPy配列からの作成

NumPy配列を使ってDataFrameを作成することもできます。

“`python
import pandas as pd
import numpy as np

data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df = pd.DataFrame(data, columns=[‘A’, ‘B’, ‘C’])
print(df)
“`

このコードは、NumPy配列dataからDataFrameを作成し、列名をA, B, Cに設定します。

3.1.3 辞書からの作成

辞書を使ってDataFrameを作成することもできます。辞書のキーが列名となり、値が列データとなります。

“`python
import pandas as pd

data = {‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’],
‘Age’: [25, 30, 28],
‘Profession’: [‘Engineer’, ‘Doctor’, ‘Teacher’]}
df = pd.DataFrame(data)
print(df)
“`

このコードは、辞書dataからDataFrameを作成します。

3.1.4 CSVファイルからの読み込み

最も一般的なDataFrameの作成方法は、CSVファイルからデータを読み込むことです。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
print(df)
“`

このコードは、data.csvというCSVファイルからDataFrameを作成します。read_csv()関数には、様々なオプションがあり、区切り文字、エンコーディング、ヘッダーの有無などを指定することができます。

3.1.5 その他のファイル形式からの読み込み

Pandasは、CSVファイル以外にも、Excel、JSON、SQLデータベースなど、様々なファイル形式からデータを読み込むことができます。

  • Excel: pd.read_excel('data.xlsx')
  • JSON: pd.read_json('data.json')
  • SQLデータベース: pd.read_sql('SELECT * FROM table_name', connection)

これらの関数を使用することで、様々なデータソースから簡単にDataFrameを作成することができます。

3.2 DataFrameの確認

DataFrameを作成したら、まずはその内容を確認することが重要です。Pandasには、DataFrameの内容を簡単に確認するための便利なメソッドがいくつか用意されています。

3.2.1 head()とtail()

head()メソッドは、DataFrameの最初の数行を表示します。引数に表示する行数を指定できます。デフォルトは5行です。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
print(df.head()) # 最初の5行を表示
print(df.head(10)) # 最初の10行を表示
“`

tail()メソッドは、DataFrameの最後の数行を表示します。head()と同様に、引数に表示する行数を指定できます。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
print(df.tail()) # 最後の5行を表示
print(df.tail(3)) # 最後の3行を表示
“`

3.2.2 info()

info()メソッドは、DataFrameに関する要約情報を表示します。列名、データ型、非nullの要素数、メモリ使用量などが確認できます。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
df.info()
“`

info()メソッドは、データ型が適切かどうか、欠損値の有無などを確認するのに役立ちます。

3.2.3 describe()

describe()メソッドは、数値型の列に関する統計量を表示します。平均値、標準偏差、最小値、最大値、四分位数などが確認できます。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
print(df.describe())
“`

describe()メソッドは、データの分布や外れ値の有無などを確認するのに役立ちます。

3.2.4 shape

shape属性は、DataFrameの行数と列数をタプルで返します。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
print(df.shape) # (行数, 列数)
“`

3.2.5 dtypes

dtypes属性は、DataFrameの各列のデータ型を表示します。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
print(df.dtypes)
“`

3.3 データへのアクセス

DataFrameのデータを操作するには、まずデータにアクセスする必要があります。Pandasには、データにアクセスするための様々な方法が用意されています。

3.3.1 列の選択

DataFrameから特定の列を選択するには、列名を指定します。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
name_column = df[‘Name’]
print(name_column)
“`

複数の列を選択するには、列名のリストを指定します。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
subset = df[[‘Name’, ‘Age’]]
print(subset)
“`

3.3.2 行の選択(ラベルベースのlocと位置ベースのiloc)

DataFrameから特定の行を選択するには、locilocを使用します。

  • loc: ラベル(インデックス)に基づいて行を選択します。
  • iloc: 位置(整数インデックス)に基づいて行を選択します。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’, index_col=’ID’) # ID列をインデックスに設定

ラベルベースのアクセス

row_by_label = df.loc[1] # インデックスが1の行を選択

位置ベースのアクセス

row_by_position = df.iloc[0] # 最初の行を選択

print(“Label-based selection:\n”, row_by_label)
print(“\nPosition-based selection:\n”, row_by_position)
“`

locilocを使うことで、DataFrameから柔軟にデータを選択することができます。

3.3.3 条件によるデータの抽出

条件に基づいてデータを抽出するには、ブールインデックスを使用します。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
age_over_25 = df[df[‘Age’] > 25]
print(age_over_25)
“`

このコードは、Age列が25より大きい行を抽出します。複数の条件を組み合わせることもできます。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
condition = (df[‘Age’] > 25) & (df[‘Profession’] == ‘Engineer’)
filtered_df = df[condition]
print(filtered_df)
“`

このコードは、Age列が25より大きく、Profession列がEngineerである行を抽出します。

3.4 データの操作

DataFrameのデータにアクセスしたら、次はデータの操作です。Pandasには、データの追加、削除、ソート、フィルタリング、更新など、様々なデータ操作を行うための機能が用意されています。

3.4.1 列の追加と削除

DataFrameに新しい列を追加するには、新しい列名を指定して値を代入します。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
df[‘Salary’] = [50000, 60000, 55000] # 新しい列を追加
print(df.head())
“`

既存の列に基づいて新しい列を作成することもできます。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
df[‘Salary_Adjusted’] = df[‘Salary’] * 1.1 # 給与を10%増やす
print(df.head())
“`

DataFrameから列を削除するには、drop()メソッドを使用します。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
df = df.drop(‘Salary’, axis=1) # Salary列を削除
print(df.head())
“`

axis=1は、列を削除することを意味します。axis=0は、行を削除することを意味します。

3.4.2 行の追加と削除

DataFrameに行を追加するには、append()メソッドを使用します。ただし、append()メソッドは非推奨となり、concat()の使用が推奨されています。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
new_row = pd.DataFrame([{‘Name’: ‘Eve’, ‘Age’: 32, ‘Profession’: ‘Analyst’}])
df = pd.concat([df, new_row], ignore_index=True) # 新しい行を追加
print(df.tail())
“`

DataFrameから行を削除するには、drop()メソッドを使用します。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’, index_col=’ID’)
df = df.drop(2, axis=0) # インデックスが2の行を削除
print(df.head())
“`

axis=0は、行を削除することを意味します。

3.4.3 データのソート

DataFrameを特定の列の値に基づいてソートするには、sort_values()メソッドを使用します。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
df = df.sort_values(‘Age’) # Age列で昇順にソート
print(df.head())

df = df.sort_values(‘Age’, ascending=False) # Age列で降順にソート
print(df.head())
“`

複数の列に基づいてソートすることもできます。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
df = df.sort_values([‘Profession’, ‘Age’], ascending=[True, False]) # Profession列で昇順、Age列で降順にソート
print(df.head())
“`

3.4.4 データのフィルタリング

条件に基づいてデータをフィルタリングするには、ブールインデックスを使用します(3.3.3参照)。

3.4.5 データの更新

DataFrameのデータを更新するには、インデックスと列名を指定して値を代入します。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’, index_col=’ID’)
df.loc[1, ‘Age’] = 26 # インデックスが1の行のAge列を26に更新
print(df.head())
“`

条件に基づいてデータを更新することもできます。

“`python
import pandas as pd

df = pd.read_csv(‘data.csv’)
df.loc[df[‘Age’] > 25, ‘Salary’] = df[‘Salary’] * 1.1 # 25歳より上の人の給与を10%増やす
print(df.head())
“`

3.5 欠損値の処理

現実世界のデータは、しばしば欠損値を含んでいます。欠損値は、データ分析の結果に悪影響を及ぼす可能性があるため、適切に処理する必要があります。Pandasは、欠損値の検出、削除、補完など、欠損値の処理に特化した機能を提供します。

3.5.1 欠損値の確認 (isnull() と notnull())

isnull()メソッドは、DataFrameの各要素が欠損値であるかどうかを判定し、ブール値のDataFrameを返します。

“`python
import pandas as pd
import numpy as np

data = {‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
‘Age’: [25, 30, np.nan, 28], # np.nanはNumPyの欠損値を表す
‘Profession’: [‘Engineer’, None, ‘Teacher’, ‘Doctor’]} # Noneも欠損値として扱われる
df = pd.DataFrame(data)
print(df.isnull())
“`

notnull()メソッドは、isnull()メソッドの逆で、DataFrameの各要素が欠損値でないかどうかを判定し、ブール値のDataFrameを返します。

“`python
import pandas as pd
import numpy as np

data = {‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
‘Age’: [25, 30, np.nan, 28],
‘Profession’: [‘Engineer’, None, ‘Teacher’, ‘Doctor’]}
df = pd.DataFrame(data)
print(df.notnull())
“`

これらのメソッドを使って、DataFrame全体だけでなく、特定の列に欠損値が含まれているかどうかを確認することもできます。

“`python
import pandas as pd
import numpy as np

data = {‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
‘Age’: [25, 30, np.nan, 28],
‘Profession’: [‘Engineer’, None, ‘Teacher’, ‘Doctor’]}
df = pd.DataFrame(data)

print(df[‘Age’].isnull().sum()) # Age列の欠損値の数を表示
print(df[‘Profession’].notnull().all()) # Profession列に欠損値が含まれていないかどうかを確認
“`

3.5.2 欠損値の削除 (dropna())

dropna()メソッドは、欠損値を含む行または列を削除します。

“`python
import pandas as pd
import numpy as np

data = {‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
‘Age’: [25, 30, np.nan, 28],
‘Profession’: [‘Engineer’, None, ‘Teacher’, ‘Doctor’]}
df = pd.DataFrame(data)

df_cleaned = df.dropna() # 欠損値を含む行を削除
print(df_cleaned)

df_cleaned_columns = df.dropna(axis=1) # 欠損値を含む列を削除
print(df_cleaned_columns)
“`

axis=0は、行を削除することを意味します。axis=1は、列を削除することを意味します。dropna()メソッドには、他にもいくつかのオプションがあります。

  • how: 'any' (デフォルト): 欠損値が1つでも含まれている行または列を削除します。 'all': すべての要素が欠損値である行または列を削除します。
  • thresh: 非欠損値の最小数を指定します。この数より非欠損値が少ない行または列を削除します。
  • subset: 欠損値を確認する列のリストを指定します。

3.5.3 欠損値の補完 (fillna())

fillna()メソッドは、欠損値を指定された値で補完します。

“`python
import pandas as pd
import numpy as np

data = {‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’],
‘Age’: [25, 30, np.nan, 28],
‘Profession’: [‘Engineer’, None, ‘Teacher’, ‘Doctor’]}
df = pd.DataFrame(data)

df_filled = df.fillna(0) # 欠損値を0で補完
print(df_filled)

df_filled_mean = df.fillna(df[‘Age’].mean()) # 欠損値をAge列の平均値で補完
print(df_filled_mean)
“`

fillna()メソッドには、他にもいくつかのオプションがあります。

  • method: 補完方法を指定します。
    • 'ffill': 直前の値で補完します (forward fill)。
    • 'bfill': 直後の値で補完します (backward fill)。
  • limit: 連続する欠損値を補完する最大数を指定します。

4. Pandasのデータ分析応用

Pandasの基本操作を習得したら、次はデータ分析の応用です。ここでは、グルーピングと集計、データの結合、ピボットテーブル、時系列データの処理について詳しく解説します。

4.1 グルーピングと集計 (groupby())

groupby()メソッドは、特定の列の値に基づいてデータをグループ化し、グループごとに集計処理を行うための強力な機能です。

4.1.1 基本的なグルーピング

groupby()メソッドに列名を指定すると、その列の値に基づいてDataFrameがグループ化されます。

“`python
import pandas as pd

data = {‘Department’: [‘Sales’, ‘Marketing’, ‘Sales’, ‘Marketing’, ‘Sales’, ‘Marketing’],
‘Employee’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’, ‘Eve’, ‘Fiona’],
‘Salary’: [50000, 60000, 55000, 65000, 52000, 62000]}
df = pd.DataFrame(data)

grouped = df.groupby(‘Department’)
print(grouped.groups) # グループの情報を表示
“`

grouped.groupsは、グループ名と対応するインデックスの辞書を返します。

4.1.2 複数の列によるグルーピング

groupby()メソッドに列名のリストを指定すると、複数の列の値に基づいてDataFrameがグループ化されます。

“`python
import pandas as pd

data = {‘Department’: [‘Sales’, ‘Sales’, ‘Marketing’, ‘Marketing’, ‘Sales’, ‘Marketing’],
‘Gender’: [‘Female’, ‘Male’, ‘Female’, ‘Male’, ‘Female’, ‘Male’],
‘Employee’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’, ‘Eve’, ‘Fiona’],
‘Salary’: [50000, 60000, 55000, 65000, 52000, 62000]}
df = pd.DataFrame(data)

grouped = df.groupby([‘Department’, ‘Gender’])
print(grouped.groups)
“`

4.1.3 集計関数の適用 (sum, mean, count, etc.)

groupby()メソッドでグループ化されたデータに対して、集計関数を適用することができます。

“`python
import pandas as pd

data = {‘Department’: [‘Sales’, ‘Marketing’, ‘Sales’, ‘Marketing’, ‘Sales’, ‘Marketing’],
‘Employee’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’, ‘Eve’, ‘Fiona’],
‘Salary’: [50000, 60000, 55000, 65000, 52000, 62000]}
df = pd.DataFrame(data)

grouped = df.groupby(‘Department’)
print(grouped[‘Salary’].sum()) # 部門ごとの給与の合計
print(grouped[‘Salary’].mean()) # 部門ごとの給与の平均
print(grouped[‘Employee’].count()) # 部門ごとの従業員数
“`

4.1.4 カスタム集計関数の適用

agg()メソッドを使用すると、カスタム集計関数を適用することができます。

“`python
import pandas as pd
import numpy as np

data = {‘Department’: [‘Sales’, ‘Marketing’, ‘Sales’, ‘Marketing’, ‘Sales’, ‘Marketing’],
‘Employee’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’, ‘Eve’, ‘Fiona’],
‘Salary’: [50000, 60000, 55000, 65000, 52000, 62000]}
df = pd.DataFrame(data)

grouped = df.groupby(‘Department’)
print(grouped[‘Salary’].agg([np.sum, np.mean, np.std])) # 部門ごとの給与の合計、平均、標準偏差

def salary_range(x):
return x.max() – x.min()

print(grouped[‘Salary’].agg(salary_range)) # 部門ごとの給与の範囲
“`

4.2 データの結合 (merge, join, concat)

Pandasには、複数のDataFrameを結合するための3つの主要な方法があります。merge(), join(), concat()です。

4.2.1 merge: データベースのような結合

merge()関数は、データベースの結合操作のように、共通の列の値に基づいてDataFrameを結合します。

“`python
import pandas as pd

df1 = pd.DataFrame({‘ID’: [1, 2, 3, 4],
‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’]})
df2 = pd.DataFrame({‘ID’: [2, 3, 4, 5],
‘Salary’: [60000, 55000, 65000, 70000]})

merged_df = pd.merge(df1, df2, on=’ID’, how=’inner’) # ID列をキーとして内部結合
print(merged_df)
“`

how引数は、結合の種類を指定します。

  • 'inner': 内部結合 (共通のキーを持つ行のみを結合)
  • 'outer': 外部結合 (すべての行を結合し、対応するキーがない場合は欠損値を挿入)
  • 'left': 左結合 (左側のDataFrameのすべての行を保持し、右側のDataFrameで対応するキーがない場合は欠損値を挿入)
  • 'right': 右結合 (右側のDataFrameのすべての行を保持し、左側のDataFrameで対応するキーがない場合は欠損値を挿入)

4.2.2 join: インデックスによる結合

join()メソッドは、インデックスに基づいてDataFrameを結合します。

“`python
import pandas as pd

df1 = pd.DataFrame({‘Name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’]}, index=[1, 2, 3, 4])
df2 = pd.DataFrame({‘Salary’: [60000, 55000, 65000, 70000]}, index=[2, 3, 4, 5])

joined_df = df1.join(df2, how=’inner’) # インデックスをキーとして内部結合
print(joined_df)
“`

4.2.3 concat: データの連結

concat()関数は、DataFrameを垂直または水平方向に連結します。

“`python
import pandas as pd

df1 = pd.DataFrame({‘Name’: [‘Alice’, ‘Bob’],
‘Age’: [25, 30]})
df2 = pd.DataFrame({‘Name’: [‘Charlie’, ‘David’],
‘Age’: [28, 32]})

concatenated_df = pd.concat([df1, df2], ignore_index=True) # 垂直方向に連結
print(concatenated_df)

df3 = pd.DataFrame({‘Profession’: [‘Engineer’, ‘Doctor’]}, index=[0, 1])
df4 = pd.DataFrame({‘City’: [‘New York’, ‘London’]}, index=[0, 1])

concatenated_df_horizontal = pd.concat([df3, df4], axis=1) # 水平方向に連結
print(concatenated_df_horizontal)
“`

axis=0は、垂直方向に連結することを意味します。axis=1は、水平方向に連結することを意味します。

4.3 ピボットテーブル (pivot_table())

pivot_table()関数は、データを集計し、ピボットテーブルを作成します。ピボットテーブルは、データを様々な角度から分析するのに非常に便利なツールです。

4.3.1 ピボットテーブルの作成

pivot_table()関数には、index, columns, valuesという3つの主要な引数があります。

  • index: ピボットテーブルの行インデックスとして使用する列
  • columns: ピボットテーブルの列インデックスとして使用する列
  • values: 集計する値を含む列

“`python
import pandas as pd

data = {‘Date’: [‘2023-01-01’, ‘2023-01-01’, ‘2023-01-02’, ‘2023-01-02’, ‘2023-01-03’, ‘2023-01-03’],
‘Product’: [‘A’, ‘B’, ‘A’, ‘B’, ‘A’, ‘B’],
‘Sales’: [100, 200, 150, 250, 120, 220]}
df = pd.DataFrame(data)

pivot_table = pd.pivot_table(df, index=’Date’, columns=’Product’, values=’Sales’)
print(pivot_table)
“`

4.3.2 複数インデックスと複数カラムの使用

pivot_table()関数では、複数の列をインデックスやカラムとして使用することができます。

“`python
import pandas as pd

data = {‘Date’: [‘2023-01-01’, ‘2023-01-01’, ‘2023-01-02’, ‘2023-01-02’, ‘2023-01-03’, ‘2023-01-03’,
‘2023-01-01’, ‘2023-01-01’, ‘2023-01-02’, ‘2023-01-02’, ‘2023-01-03’, ‘2023-01-03’],
‘Product’: [‘A’, ‘B’, ‘A’, ‘B’, ‘A’, ‘B’, ‘A’, ‘B’, ‘A’, ‘B’, ‘A’, ‘B’],
‘Region’: [‘East’, ‘West’, ‘East’, ‘West’, ‘East’, ‘West’, ‘West’, ‘East’, ‘West’, ‘East’, ‘West’, ‘East’],
‘Sales’: [100, 200, 150, 250, 120, 220, 180, 130, 230, 1

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール