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] # 最初のデータフレームを選択
# 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
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))
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.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['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.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')
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 = 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
}
]
{
"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()
# 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
その他の拡張