Pandas

[Python] Pandasの基本的な使い方をわかりやすく解説

PandasはPythonでデータ操作や分析を行うためのライブラリです。

主に SeriesDataFrame という2つのデータ構造を使用します。

Seriesは1次元のデータ、DataFrameは2次元のデータを扱います。

データの読み込みにはread_csv()などを使い、データの表示にはhead()tail()を使用します。

データのフィルタリングや集計にはloc[]groupby()が便利です。

データの欠損値処理にはisnull()fillna()を使用します。

Pandasとは?基本の理解

Pandasは、Pythonでデータ操作や分析を行うためのライブラリです。

特に、表形式のデータを扱うのに非常に便利で、データの読み込み、加工、集計、可視化などを簡単に行うことができます。

Pandasは、データサイエンスや機械学習の分野で広く使用されています。

Pandasの特徴

特徴説明
データ構造Series(1次元)とDataFrame(2次元)を提供
データの操作フィルタリング、グループ化、集計が容易
データの入出力CSV、Excel、SQLなど多様なフォーマットに対応
時系列データ処理日付や時間に基づくデータの操作が簡単
高速な処理NumPyを基盤にしており、高速な計算が可能

SeriesとDataFrameの違い

  • Series: 一次元のラベル付き配列で、データのインデックスを持ちます。

例えば、特定の列のデータを表現するのに適しています。

  • DataFrame: 二次元のラベル付きデータ構造で、複数のSeriesを持つことができます。

行と列の両方にインデックスがあり、表形式のデータを扱うのに最適です。

Pandasのインストール方法

Pandasは、Pythonのパッケージ管理ツールであるpipを使用して簡単にインストールできます。

以下のコマンドを実行してください。

pip install pandas

Pandasの基本的な使い方の流れ

  1. ライブラリのインポート: Pandasを使用するために、まずライブラリをインポートします。
import pandas as pd
  1. データの読み込み: CSVファイルやExcelファイルなどからデータを読み込みます。
df = pd.read_csv('data.csv')
  1. データの確認: データの内容を確認するために、head()info()メソッドを使用します。
print(df.head())
  1. データの操作: フィルタリングや集計などの操作を行います。
filtered_data = df[df['column_name'] > 10]
  1. データの出力: 処理したデータをCSVファイルなどに書き出します。
df.to_csv('output.csv', index=False)

この流れを理解することで、Pandasを使ったデータ分析の基本的な操作ができるようになります。

DataFrameの作成と基本操作

Pandasの中心的なデータ構造であるDataFrameは、表形式のデータを扱うための非常に便利なツールです。

ここでは、DataFrameの作成方法や基本的な操作について解説します。

DataFrameの作成方法

DataFrameはさまざまな方法で作成できます。

以下に代表的な方法を示します。

リストからのDataFrame作成

リストを使って簡単にDataFrameを作成できます。

以下のコードでは、リストのリストを使ってDataFrameを作成しています。

import pandas as pd
data = [[1, 'Alice', 23], [2, 'Bob', 30], [3, 'Charlie', 22]]
df = pd.DataFrame(data, columns=['ID', 'Name', 'Age'])
print(df)
ID     Name  Age
0   1   Alice   23
1   2     Bob   30
2   3 Charlie   22

辞書からのDataFrame作成

辞書を使ってDataFrameを作成することもできます。

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

import pandas as pd
data = {
    'ID': [1, 2, 3],
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [23, 30, 22]
}
df = pd.DataFrame(data)
print(df)
ID     Name  Age
0   1   Alice   23
1   2     Bob   30
2   3 Charlie   22

CSVファイルからのDataFrame作成

CSVファイルからDataFrameを作成するには、read_csv()メソッドを使用します。

import pandas as pd
df = pd.read_csv('data.csv')
print(df)

DataFrameの表示

DataFrameの内容を確認するためのメソッドがいくつかあります。

head()とtail()でデータの一部を確認

head()メソッドは最初の5行を表示し、tail()メソッドは最後の5行を表示します。

print(df.head())  # 最初の5行を表示
print(df.tail())  # 最後の5行を表示

info()とdescribe()でデータの概要を確認

info()メソッドはDataFrameの構造を、describe()メソッドは数値データの統計情報を表示します。

print(df.info())      # DataFrameの情報を表示
print(df.describe())  # 統計情報を表示

列・行の選択と抽出

DataFrameから特定の列や行を選択する方法を見ていきます。

列の選択:[]とloc[]

列を選択するには、[]を使う方法とloc[]を使う方法があります。

# 列の選択
name_column = df['Name']  # []を使った列の選択
age_column = df.loc[:, 'Age']  # loc[]を使った列の選択

行の選択:iloc[]とloc[]

行を選択するには、iloc[](整数位置)とloc[](ラベル)を使用します。

# 行の選択
first_row = df.iloc[0]  # 最初の行を選択
specific_row = df.loc[1]  # ラベルを使った行の選択

データのソート

DataFrameのデータをソートする方法について説明します。

sort_values()で値を基準にソート

sort_values()メソッドを使って、特定の列の値を基準にデータをソートできます。

sorted_df = df.sort_values(by='Age')  # 年齢でソート
print(sorted_df)

sort_index()でインデックスを基準にソート

sort_index()メソッドを使って、インデックスを基準にデータをソートできます。

sorted_index_df = df.sort_index()  # インデックスでソート
print(sorted_index_df)

これらの基本操作を理解することで、Pandasを使ったデータ分析がよりスムーズに行えるようになります。

データのフィルタリングと条件検索

Pandasを使用すると、DataFrame内のデータを条件に基づいてフィルタリングすることができます。

これにより、特定の条件を満たすデータを簡単に抽出できます。

ここでは、条件に基づくデータの抽出方法について解説します。

条件に基づくデータの抽出

単一条件でのフィルタリング

単一の条件を使ってデータをフィルタリングするには、条件式を用いてBooleanインデックスを作成します。

以下の例では、年齢が25歳以上のデータを抽出しています。

import pandas as pd
data = {
    'ID': [1, 2, 3, 4],
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [23, 30, 22, 35]
}
df = pd.DataFrame(data)
# 年齢が25歳以上のデータを抽出
filtered_data = df[df['Age'] >= 25]
print(filtered_data)
ID   Name  Age
1   2    Bob   30
3   4  David   35

複数条件でのフィルタリング

複数の条件を組み合わせてデータをフィルタリングすることも可能です。

条件を組み合わせる際は、&(AND)や|(OR)を使用します。

以下の例では、年齢が25歳以上かつ名前が’Bob’のデータを抽出しています。

# 年齢が25歳以上かつ名前が'Bob'のデータを抽出
filtered_data_multiple = df[(df['Age'] >= 25) & (df['Name'] == 'Bob')]
print(filtered_data_multiple)
ID Name  Age
1   2  Bob   30

isin()で特定の値を持つデータの抽出

isin()メソッドを使用すると、特定の値のリストに含まれるデータを簡単に抽出できます。

以下の例では、名前が’Alice’または’Charlie’のデータを抽出しています。

# 名前が'Alice'または'Charlie'のデータを抽出
filtered_data_isin = df[df['Name'].isin(['Alice', 'Charlie'])]
print(filtered_data_isin)
ID     Name  Age
0   1   Alice   23
2   3 Charlie   22

between()で範囲指定のデータ抽出

between()メソッドを使用すると、指定した範囲内の値を持つデータを抽出できます。

以下の例では、年齢が20歳から30歳のデータを抽出しています。

# 年齢が20歳から30歳のデータを抽出
filtered_data_between = df[df['Age'].between(20, 30)]
print(filtered_data_between)
ID     Name  Age
0   1   Alice   23
1   2     Bob   30
2   3 Charlie   22

これらのフィルタリング手法を活用することで、必要なデータを効率的に抽出し、分析を行うことができます。

データの集計と統計処理

Pandasを使用すると、データの集計や統計処理を簡単に行うことができます。

ここでは、基本的な統計量の計算、データのグループ化と集計、ピボットテーブルの作成について解説します。

基本的な統計量の計算

Pandasには、データの基本的な統計量を計算するための便利なメソッドが用意されています。

mean()で平均値を計算

mean()メソッドを使用すると、指定した列の平均値を計算できます。

以下の例では、年齢の平均値を計算しています。

import pandas as pd
data = {
    'ID': [1, 2, 3, 4],
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [23, 30, 22, 35]
}
df = pd.DataFrame(data)
# 年齢の平均値を計算
average_age = df['Age'].mean()
print(f'平均年齢: {average_age}')
平均年齢: 27.5

sum()で合計を計算

sum()メソッドを使用すると、指定した列の合計を計算できます。

以下の例では、年齢の合計を計算しています。

# 年齢の合計を計算
total_age = df['Age'].sum()
print(f'合計年齢: {total_age}')
合計年齢: 110

count()でデータ数をカウント

count()メソッドを使用すると、指定した列のデータ数をカウントできます。

以下の例では、年齢のデータ数をカウントしています。

# 年齢のデータ数をカウント
count_age = df['Age'].count()
print(f'年齢のデータ数: {count_age}')
年齢のデータ数: 4

グループ化と集計

データをグループ化して集計することで、より詳細な分析が可能になります。

groupby()でデータをグループ化

groupby()メソッドを使用すると、指定した列に基づいてデータをグループ化できます。

以下の例では、年齢を基準にデータをグループ化しています。

# 年齢でデータをグループ化
grouped_data = df.groupby('Age')
print(grouped_data.size())  # 各年齢のデータ数を表示
Age
22    1
23    1
30    1
35    1
dtype: int64

agg()で複数の集計関数を適用

agg()メソッドを使用すると、グループ化したデータに対して複数の集計関数を適用できます。

以下の例では、年齢ごとのデータ数と平均を計算しています。

# 年齢でグループ化し、データ数と平均を計算
aggregated_data = df.groupby('Age').agg(['count', 'mean'])
print(aggregated_data)
ID
     count mean
Age           
22      1  3.0
23      1  3.0
30      1  3.0
35      1  3.0

ピボットテーブルの作成

ピボットテーブルを使用すると、データを集計して視覚的に表示することができます。

pivot_table()の使い方

pivot_table()メソッドを使用して、特定の列をインデックス、列、値として指定し、集計を行います。

以下の例では、年齢をインデックス、名前を列、IDの数を値としてピボットテーブルを作成しています。

# ピボットテーブルの作成
pivot_table = pd.pivot_table(df, values='ID', index='Age', columns='Name', aggfunc='count', fill_value=0)
print(pivot_table)
Name  Alice  Bob  Charlie  David
Age                              
22       0    0        1      0
23       1    0        0      0
30       0    1        0      0
35       0    0        0      1

これにより、年齢ごとの各名前の出現数を視覚的に確認することができます。

データの集計と統計処理を活用することで、より深い洞察を得ることが可能になります。

データのクリーニング

データ分析を行う上で、データのクリーニングは非常に重要なステップです。

データには欠損値や重複データが含まれていることが多く、これらを適切に処理することで、分析結果の信頼性を高めることができます。

ここでは、欠損値の処理、重複データの処理、データ型の変換について解説します。

欠損値の処理

欠損値は、データの一部が欠けている状態を指します。

Pandasでは、欠損値を簡単に確認・処理することができます。

isnull()とnotnull()で欠損値を確認

isnull()メソッドを使用すると、欠損値があるかどうかを確認できます。

逆に、notnull()メソッドを使用すると、欠損値でないデータを確認できます。

import pandas as pd
data = {
    'ID': [1, 2, 3, 4],
    'Name': ['Alice', None, 'Charlie', 'David'],
    'Age': [23, 30, None, 35]
}
df = pd.DataFrame(data)
# 欠損値の確認
print(df.isnull())  # 欠損値があるかどうかを表示
ID   Name    Age
0  False  False  False
1  False   True  False
2  False  False   True
3  False  False  False

fillna()で欠損値を埋める

fillna()メソッドを使用すると、欠損値を特定の値で埋めることができます。

以下の例では、欠損値を0で埋めています。

# 欠損値を0で埋める
df_filled = df.fillna(0)
print(df_filled)
ID     Name   Age
0  1   Alice   23.0
1  2       0   30.0
2  3 Charlie   0.0
3  4   David   35.0

dropna()で欠損値を削除

dropna()メソッドを使用すると、欠損値を含む行を削除できます。

以下の例では、欠損値を含む行を削除しています。

# 欠損値を含む行を削除
df_dropped = df.dropna()
print(df_dropped)
ID     Name   Age
0  1   Alice   23.0
1  2       0   30.0
3  4   David   35.0

重複データの処理

重複データは、同じデータが複数回存在する状態を指します。

これを適切に処理することで、分析結果の精度を向上させることができます。

duplicated()で重複を確認

duplicated()メソッドを使用すると、重複している行を確認できます。

以下の例では、重複行の有無を確認しています。

# 重複行の確認
duplicates = df.duplicated()
print(duplicates)
0    False
1    False
2    False
3    False
dtype: bool

drop_duplicates()で重複を削除

drop_duplicates()メソッドを使用すると、重複行を削除できます。

以下の例では、重複行を削除しています。

# 重複行を削除
df_unique = df.drop_duplicates()
print(df_unique)
ID     Name   Age
0  1   Alice   23.0
1  2       0   30.0
2  3 Charlie   0.0
3  4   David   35.0

データ型の変換

データ型の変換は、データの正確な処理において重要です。

Pandasでは、データ型を簡単に変換できます。

astype()でデータ型を変換

astype()メソッドを使用すると、指定したデータ型に変換できます。

以下の例では、年齢を整数型に変換しています。

# 年齢を整数型に変換
df['Age'] = df['Age'].astype(int)
print(df)
ID     Name  Age
0  1   Alice   23
1  2       0   30
2  3 Charlie    0
3  4   David   35

to_datetime()で日付型に変換

to_datetime()メソッドを使用すると、文字列を日付型に変換できます。

以下の例では、日付の文字列を日付型に変換しています。

# 日付の文字列を日付型に変換
date_data = {
    'Date': ['2023-01-01', '2023-02-01', '2023-03-01']
}
df_dates = pd.DataFrame(date_data)
df_dates['Date'] = pd.to_datetime(df_dates['Date'])
print(df_dates)
Date
0 2023-01-01
1 2023-02-01
2 2023-03-01

データのクリーニングを行うことで、分析に適したデータセットを作成し、より正確な結果を得ることができます。

データの結合と結合操作

Pandasでは、複数のDataFrameを結合することで、より大きなデータセットを作成することができます。

ここでは、DataFrameの結合方法とインデックスの操作について解説します。

複数のDataFrameを結合する

複数のDataFrameを結合する方法には、concat()メソッドmerge()メソッドがあります。

concat()で縦・横に結合

concat()メソッドを使用すると、DataFrameを縦または横に結合できます。

以下の例では、2つのDataFrameを縦に結合しています。

import pandas as pd
data1 = {
    'ID': [1, 2],
    'Name': ['Alice', 'Bob']
}
data2 = {
    'ID': [3, 4],
    'Name': ['Charlie', 'David']
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
# 縦に結合
df_concat_vertical = pd.concat([df1, df2], axis=0)
print(df_concat_vertical)
ID     Name
0   1   Alice
1   2     Bob
0   3 Charlie
1   4   David

横に結合する場合は、axis=1を指定します。

# 横に結合
df_concat_horizontal = pd.concat([df1, df2], axis=1)
print(df_concat_horizontal)
ID     Name  ID     Name
0   1   Alice   3 Charlie
1   2     Bob   4   David

merge()でキーを基に結合

merge()メソッドを使用すると、特定のキーを基にDataFrameを結合できます。

以下の例では、共通の列IDを基に2つのDataFrameを結合しています。

data3 = {
    'ID': [1, 2, 3],
    'Age': [23, 30, 22]
}
df3 = pd.DataFrame(data3)
# IDを基に結合
df_merged = pd.merge(df1, df3, on='ID')
print(df_merged)
ID     Name  Age
0   1   Alice   23
1   2     Bob   30

インデックスの操作

DataFrameのインデックスを操作することで、データの管理が容易になります。

set_index()でインデックスを設定

set_index()メソッドを使用すると、指定した列をインデックスとして設定できます。

以下の例では、ID列をインデックスに設定しています。

# IDをインデックスに設定
df_set_index = df1.set_index('ID')
print(df_set_index)
Name
ID       
1   Alice
2     Bob

reset_index()でインデックスをリセット

reset_index()メソッドを使用すると、インデックスをリセットして、元の列に戻すことができます。

以下の例では、インデックスをリセットしています。

# インデックスをリセット
df_reset_index = df_set_index.reset_index()
print(df_reset_index)
ID     Name
0   1   Alice
1   2     Bob

これらの結合操作やインデックスの操作を活用することで、データの整理や分析がより効率的に行えるようになります。

データの可視化

データの可視化は、分析結果を理解しやすくするための重要な手段です。

Pandasを使用すると、簡単にグラフを作成することができます。

ここでは、Pandasでの基本的なグラフ作成方法と、Matplotlibとの連携について解説します。

Pandasでの簡単なグラフ作成

Pandasには、データを可視化するための便利なメソッドが用意されています。

plot()で折れ線グラフを作成

plot()メソッドを使用すると、折れ線グラフを簡単に作成できます。

以下の例では、年齢に基づくデータを折れ線グラフで表示しています。

import pandas as pd
import matplotlib.pyplot as plt
data = {
    'ID': [1, 2, 3, 4],
    'Age': [23, 30, 22, 35]
}
df = pd.DataFrame(data)
# 折れ線グラフを作成
df.plot(x='ID', y='Age', kind='line', marker='o')
plt.title('ID vs Age')
plt.xlabel('ID')
plt.ylabel('Age')
plt.grid()
plt.show()

このコードを実行すると、IDに対する年齢の折れ線グラフが表示されます。

bar()で棒グラフを作成

bar()メソッドを使用すると、棒グラフを作成できます。

以下の例では、年齢のデータを棒グラフで表示しています。

# 棒グラフを作成
df.plot(x='ID', y='Age', kind='bar', color='skyblue')
plt.title('ID vs Age')
plt.xlabel('ID')
plt.ylabel('Age')
plt.xticks(rotation=0)  # x軸のラベルを水平に
plt.show()

このコードを実行すると、IDに対する年齢の棒グラフが表示されます。

hist()でヒストグラムを作成

hist()メソッドを使用すると、ヒストグラムを作成できます。

以下の例では、年齢の分布をヒストグラムで表示しています。

# ヒストグラムを作成
df['Age'].hist(bins=5, color='lightgreen', edgecolor='black')
plt.title('Age Distribution')
plt.xlabel('Age')
plt.ylabel('Frequency')
plt.grid()
plt.show()

このコードを実行すると、年齢の分布を示すヒストグラムが表示されます。

Matplotlibとの連携

Pandasの可視化機能はMatplotlibを基盤にしているため、Matplotlibを使用してグラフをカスタマイズすることができます。

plot()でMatplotlibを利用したカスタマイズ

Pandasのplot()メソッドを使用した後に、Matplotlibの機能を使ってさらにカスタマイズすることができます。

以下の例では、折れ線グラフにカスタマイズを加えています。

# 折れ線グラフを作成
ax = df.plot(x='ID', y='Age', kind='line', marker='o', color='orange')
# Matplotlibを使ったカスタマイズ
plt.title('ID vs Age with Customization')
plt.xlabel('ID')
plt.ylabel('Age')
plt.grid()
plt.axhline(y=df['Age'].mean(), color='red', linestyle='--', label='Average Age')  # 平均年齢の線を追加
plt.legend()
plt.show()

このコードを実行すると、平均年齢を示す赤い破線が追加された折れ線グラフが表示されます。

これらの可視化手法を活用することで、データの分析結果を視覚的に表現し、より深い洞察を得ることができます。

応用例:実際のデータ分析でのPandas活用

Pandasは、さまざまなデータソースからデータを取得し、分析するための強力なツールです。

ここでは、実際のデータ分析におけるPandasの活用方法について、いくつかの応用例を紹介します。

CSVファイルを使ったデータ分析

CSVファイルは、データ分析でよく使用されるフォーマットの一つです。

Pandasを使用すると、CSVファイルを簡単に読み込み、データを分析できます。

import pandas as pd
# CSVファイルの読み込み
df = pd.read_csv('data.csv')
# データの概要を表示
print(df.head())
# 特定の列の平均値を計算
average_value = df['column_name'].mean()
print(f'平均値: {average_value}')

このように、CSVファイルからデータを読み込み、簡単に分析を行うことができます。

Web APIから取得したデータの処理

Pandasは、Web APIから取得したデータを処理するのにも適しています。

以下の例では、requestsライブラリを使用してAPIからデータを取得し、Pandasで処理しています。

import pandas as pd
import requests
# Web APIからデータを取得
response = requests.get('https://api.example.com/data')
data = response.json()
# DataFrameに変換
df = pd.DataFrame(data)
# データの確認
print(df.head())

この方法を使うことで、リアルタイムのデータを取得し、分析することが可能です。

Excelファイルの読み込みと書き出し

PandasはExcelファイルの読み込みと書き出しもサポートしています。

以下の例では、Excelファイルを読み込み、データを処理した後、別のExcelファイルに書き出しています。

# Excelファイルの読み込み
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# データの処理(例:特定の列の合計を計算)
total_value = df['column_name'].sum()
print(f'合計値: {total_value}')
# 処理したデータを新しいExcelファイルに書き出し
df.to_excel('output.xlsx', index=False)

このように、Excelファイルを使ったデータの入出力が簡単に行えます。

時系列データの処理

Pandasは、時系列データの処理に特化した機能を提供しています。

以下の例では、日付をインデックスに設定し、時系列データを扱っています。

# 日付データを含むDataFrameの作成
data = {
    'Date': pd.date_range(start='2023-01-01', periods=5, freq='D'),
    'Value': [10, 20, 15, 30, 25]
}
df = pd.DataFrame(data)
# 日付をインデックスに設定
df.set_index('Date', inplace=True)
# 時系列データの移動平均を計算
df['Moving_Average'] = df['Value'].rolling(window=2).mean()
print(df)

このように、Pandasを使用することで、時系列データの分析が容易になります。

大規模データの効率的な処理

Pandasは、大規模データの処理にも対応しています。

chunksizeオプションを使用して、データを分割して読み込むことができます。

以下の例では、大きなCSVファイルを分割して処理しています。

# 大規模CSVファイルの読み込み
chunk_size = 10000  # チャンクサイズを指定
for chunk in pd.read_csv('large_data.csv', chunksize=chunk_size):
    # 各チャンクに対して処理を行う
    print(chunk.describe())

この方法を使うことで、大規模データを効率的に処理することができます。

これらの応用例を通じて、Pandasの強力な機能を活用し、さまざまなデータ分析のニーズに対応することができます。

まとめ

この記事では、Pandasを使用したデータ分析の基本から応用までのさまざまな機能について解説しました。

データの読み込み、操作、集計、可視化、そしてクリーニングなど、Pandasの強力な機能を活用することで、効率的にデータを扱うことが可能です。

これらの知識を基に、実際のデータ分析プロジェクトに取り組むことで、データから価値ある洞察を引き出すことができるでしょう。

関連記事

Back to top button