Pandas よく使う関数

以下に、Pandas でよく使われる関数と使用例を示します。

データの読み込み

関数説明
pd.read_csv(filename)CSV ファイルを読み込みます;
pd.read_excel(filename)Excel ファイルを読み込みます;
pd.read_sql(query, connection_object)SQL データベースからデータを読み込みます;
pd.read_json(json_string)JSON 文字列からデータを読み込みます;
pd.read_html(url)HTML ページからデータを読み込みます。

例

import pandas as pd

# CSV ファイルからデータを読み込む
df = pd.read_csv('data.csv')

# Excel ファイルからデータを読み込む
df = pd.read_excel('data.xlsx')

# SQL データベースからデータを読み込む
import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql('SELECT * FROM table_name', conn)

# JSON 文字列からデータを読み込む
json_string = '{"name": "John", "age": 30, "city": "New York"}'
df = pd.read_json(json_string)

# HTML ページからデータを読み込む
url = 'https://www.example.com'
dfs = pd.read_html(url)
df = dfs[0] # 最初のデータフレームを選択

データの表示

関数説明
df.head(n)先頭の n 行を表示します;
df.tail(n)末尾の n 行を表示します;
df.info()列名、データ型、欠損値などのデータ情報を表示します;
df.describe()平均、分散、最大値、最小値などの基本統計情報を表示します;
df.shapeデータの行数と列数を表示します。

例

# 先頭の5行を表示
df.head()

# 末尾の5行を表示
df.tail()

# データ情報を表示
df.info()

# 基本統計情報を表示
df.describe()

# データの行数と列数を表示
df.shape

例

import pandas as pd

data = [
    {"name": "Google", "likes": 25, "url": "https://www.google.com"},
    {"name": "サンプル", "likes": 30, "url": "https://www.example.com"},
    {"name": "Taobao", "likes": 35, "url": "https://www.taobao.com"}
]

df = pd.DataFrame(data)
# 先頭の2行を表示
print(df.head(2))
# 最後の1行を表示
print(df.tail(1))

上記の例の出力結果は次のとおりです:

     name  likes                     url
0  Google     25  https://www.google.com
1  サンプル     30  https://www.example.com
     name  likes                     url
2  Taobao     35  https://www.taobao.com

データクリーニング

関数説明
df.dropna()欠損値を含む行または列を削除します;
df.fillna(value)欠損値を指定した値に置き換えます;
df.replace(old_value, new_value)指定した値を新しい値に置き換えます;
df.duplicated()重複データがあるかどうかを確認します;
df.drop_duplicates()重複データを削除します。

例

# 欠損値を含む行または列を削除
df.dropna()

# 欠損値を指定した値に置き換える
df.fillna(0)

# 指定した値を新しい値に置き換える
df.replace('old_value', 'new_value')

# 重複データがあるかどうかを確認
df.duplicated()

# 重複データを削除
df.drop_duplicates()

データの選択とスライス

関数説明
df[column_name]指定した列を選択します;
df.loc[row_index, column_name]ラベルでデータを選択します;
df.iloc[row_index, column_index]位置でデータを選択します;
df.ix[row_index, column_name]ラベルまたは位置でデータを選択します;
df.filter(items=[column_name1, column_name2])指定した列を選択します;
df.filter(regex='regex')列名が正規表現に一致する列を選択します;
df.sample(n)ランダムに n 行のデータを選択します。

例

# 指定した列を選択
df['column_name']

# ラベルでデータを選択
df.loc[row_index, column_name]

# 位置でデータを選択
df.iloc[row_index, column_index]

# ラベルまたは位置でデータを選択
df.ix[row_index, column_name]

# 指定した列を選択
df.filter(items=['column_name1', 'column_name2'])

# 列名が正規表現に一致する列を選択
df.filter(regex='regex')

# ランダムに n 行のデータを選択
df.sample(n=5)

データの並べ替え

関数説明
df.sort_values(column_name)指定した列の値で並べ替えます;
df.sort_values([column_name1, column_name2], ascending=[True, False])複数の列の値で並べ替えます;
df.sort_index()インデックスで並べ替えます。

例

# 指定した列の値で並べ替える
df.sort_values('column_name')

# 複数の列の値で並べ替える
df.sort_values(['column_name1', 'column_name2'], ascending=[True, False])

# インデックスで並べ替える
df.sort_index()

データのグループ化と集計

関数説明
df.groupby(column_name)指定した列でグループ化します;
df.aggregate(function_name)グループ化したデータに対して集計操作を行います;
df.pivot_table(values, index, columns, aggfunc)ピボットテーブルを生成します。

例

# 指定した列でグループ化
df.groupby('column_name')

# グループ化したデータに対して集計操作を行う
df.aggregate('function_name')

# ピボットテーブルを生成
df.pivot_table(values='value', index='index_column', columns='column_name', aggfunc='function_name')

データの結合

関数説明
pd.concat([df1, df2])複数のデータフレームを行または列で結合します;
pd.merge(df1, df2, on=column_name)指定した列で2つのデータフレームを結合します。

例

# 複数のデータフレームを行または列で結合
df = pd.concat([df1, df2])

# 指定した列で2つのデータフレームを結合
df = pd.merge(df1, df2, on='column_name')

データの選択とフィルタリング

関数説明
df.loc[row_indexer, column_indexer]ラベルで行と列を選択します。
df.iloc[row_indexer, column_indexer]位置で行と列を選択します。
df[df['column_name'] > value]列内で条件を満たす行を選択します。
df.query('column_name > value')文字列式を使用して列内で条件を満たす行を選択します。

データの統計と要約

関数説明
df.describe()平均、標準偏差、最小値、最大値などの基本統計情報を計算します。
df.mean()各列の平均値を計算します。
df.median()各列の中央値を計算します。
df.mode()各列の最頻値を計算します。
df.count()各列の欠損値以外の値の数を計算します。

例

次のような JSON データがあるとします。データはdata.jsonファイル:

data.json ファイル

[
  {
    "name": "Alice",
    "age": 25,
    "gender": "female",
    "score": 80
  },
  {
    "name": "Bob",
    "age": null,
    "gender": "male",
    "score": 90
  },
  {
    "name": "Charlie",
    "age": 30,
    "gender": "male",
    "score": null
  },
  {
    "name": "David",
    "age": 35,
    "gender": "male",
    "score": 70
  }
]

Pandas を使用して JSON データを読み込み、データクリーニングと処理、データの選択とフィルタリング、データの統計と要約などの操作を行うことができます。具体的には次のとおりです:

例

import pandas as pd

# JSON データを読み込む
df = pd.read_json('data.json')

# 欠損値を削除
df = df.dropna()

# 指定した値で欠損値を埋める
df = df.fillna({'age': 0, 'score': 0})

# 列名を変更
df = df.rename(columns={'name': '名前', 'age': '年齢', 'gender': '性別', 'score': '成績'})

# 成績で並べ替え
df = df.sort_values(by='成績', ascending=False)

# 性別でグループ化し、平均年齢と成績を計算
grouped = df.groupby('性別').agg({'年齢': 'mean', '成績': 'mean'})

# 成績が90以上の行を選択し、名前と成績の2列だけを保持
df = df.loc[df['成績'] >= 90, ['名前', '成績']]

# 各列の基本統計情報を計算
stats = df.describe()

# 各列の平均値を計算
mean = df.mean()

# 各列の中央値を計算
median = df.median()

# 各列の最頻値を計算
mode = df.mode()

# 各列の欠損値以外の値の数を計算
count = df.count()

出力結果は次のとおりです:

# df
   姓名  年龄 性别  成绩
1  Bob   0  male  90

# grouped
             年龄  成绩
性别                
female  25.000000  80
male    27.500000  80

# stats
         成绩
count   1.0
mean   90.0
std     NaN
min    90.0
25%    90.0
50%    90.0
75%    90.0
max    90.0

# mean
成绩    90.0
dtype: float64

# median
成绩    90.0
dtype: float64

# mode
    姓名    成绩
0  Bob  90.0

# count
姓名    1
成绩    1
dtype: int64
その他の拡張