概要
Pandasは、Pythonでデータ解析を行うためのライブラリです。Pandasを使うことで、CSVやExcelなどのファイルからデータを読み込んで、表形式で扱うことができます。また、データの前処理やクレンジング、集計、統計的な分析を行うこともできます。PandasはNumPyとMatplotlibに基づいており、これらと組み合わせることで高度なデータ分析が可能になります。
利用例
pandasでデータを前処理する一例としては、以下のような作業が挙げられます。
CSVファイルの読み込み
import pandas as pd
df = pd.read_csv('data.csv')
データの確認
# 最初の5行の表示
df.head()
# サマリー統計量の表示
df.describe()
# 行数・列数の表示
df.shape
欠損値の処理
# 欠損値の存在確認
df.isnull().sum()
# 削除
df.dropna(inplace=True)
# 0で埋める (数値の場合)
df.fillna(0, inplace=True)
# 平均値で埋める (数値の場合)
df.fillna(df.mean(), inplace=True)
# 一つ前の値で埋める (時系列データの場合)
df.fillna(method='ffill', inplace=True)
不要な列の削除
df = df.drop(['column_name_1','column_name_2'], axis=1)
列のデータ型変更
df['column_name'] = df['column_name'].astype('int')
データの結合
df_merged = pd.merge(df1, df2, on='key')
ダミー変数の作成
df_dummy = pd.get_dummies(df, columns=['column_name'])
データのソート
df_sorted = df.sort_values(by=['column_name_1', 'column_name_2'], ascending=False)
日付型の変換
df['date'] = pd.to_datetime(df['date'])
以上は代表的な前処理の例ですが、これ以外にも多くの前処理方法があります。
Numpy to Pandas
NumPyのデータをPandasに変換する方法は、pandas.DataFrame()関数を使用して、NumPyのndarrayをデータフレームに変換することができます。以下は、一つのNumPy配列をpandasの1列に変換する例です。
import numpy as np
import pandas as pd
# NumPy ndarrayを作成する
arr = np.array([['Alice', 25], ['Bob', 30], ['Charlie', 35]])
# Pandas DataFrameに変換する
df = pd.DataFrame(arr, columns=['Name', 'Age'])
# 結果を表示する
print(df)
出力結果:
Name Age
0 Alice 25
1 Bob 30
2 Charlie 35
Pandasのデータをグラフで表示
pandasのDataFrameをグラフで表示するためには、matplotlibというPythonのグラフ描画ライブラリーを使って次の手順を実行します。
まず、グラフを描画するためのデータを準備する必要があります。pandasのDataFrameに保存されているデータを使用している場合は、次のようにして値を配列に変換できます。
import pandas as pd
import matplotlib.pyplot as plt
# example dataframe
data = {'year': [2010, 2011, 2012, 2013, 2014, 2015, 2016],
'profit': [500, 600, 700, 800, 900, 1000, 1100]}
df = pd.DataFrame(data)
x = df['year'].values
y = df['profit'].values
plt.plot(x, y)
plt.show()
これにより、指定した列間の折れ線グラフが表示されます。他の種類のグラフも、適切なMatplotlib関数を選択することで、同じ方法で作成することができます。
高度な使い方
リサンプリング
pandasでは時系列データを扱う機能が豊富ですが、その中でも詳しく説明していくのは、resampling(リサンプリング)と呼ばれる機能です。resamplingとは、頻度の異なる時系列データを、一定間隔で再構成することです。例えば、1分単位であるセンサーデータを5分、10分、1時間単位に変換したりします。
以下は新しい列を作成し、毎週の最大値、最小値、平均値を取得する方法の例です。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(1000, 4), index=pd.date_range('1/1/2022', periods=1000), columns=['A', 'B', 'C', 'D'])
df_weekly_max = df.resample('W').max()
df_weekly_min = df.resample('W').min()
df_weekly_mean = df.resample('W').mean()
マージや結合
pandasを使うと複数のDataFrameをマージしたり、結合したりすることができます。ExcelでいうところのVLOOKUPや、SQLのJOINに相当する機能です。pandasのために、3つのテーブルを準備しましょう。
customersテーブル:顧客ごとに識別する情報が格納されています
ordersテーブル:注文ごとの情報が格納されています
itemsテーブル:商品ごとの情報が格納されています
customersとordersを「customer_id」(共通カラム)でマージし、さらにitemsも「order_id」でjoinする場合の例です。
import pandas as pd
orders = pd.read_csv('orders.csv')
customers = pd.read_csv('customers.csv')
items = pd.read_csv('items.csv')
# 注文情報と顧客情報をマージする
customer_orders = pd.merge(customers, orders, on='customer_id')
# itemsをjoinする
customer_order_items = pd.merge(customer_orders, items, on='order_id')
groupby
pandasではgroupby()関数を使うことで、指定した列や条件で集計処理を行うことができます。単にレコードの集計だけでなく、クロス集計も可能です。
以下は、天気予報のデータから日ごとに最高気温・最低気温を算出する例です。
data = {
"date": ["2022-01-01", "2022-01-02", "2022-01-03", "2022-01-04", "2022-01-05"],
"weather": ['cloudy', 'rainy', 'sunny', 'cloudy', 'sunny'],
"maxtemp": [10, 9, 8, 11, 12],
"mintemp": [-4, -1, 2, 0, -2]}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
df_daily = df.groupby(pd.Grouper(freq='D')).agg({'maxtemp': 'max', 'mintemp': 'min'})
これらの機能を使って、効率的かつ柔軟にデータの前処理を行うことができます。
公式サイト