Pandasは、Pythonでデータ操作や分析を行うための強力なライブラリです。特に、表形式のデータ(データフレーム)の操作を簡単にするためのツールセットを提供しています。データサイエンス、機械学習、統計分析などの分野で広く使用されています。
Pandasとは
Pandasは、Pythonでデータ操作および分析を行うための強力なライブラリです。特にデータフレームというデータ構造を提供しており、大量のデータを簡単に操作するための豊富な機能を備えています。
インストール
まず、Pandasを使用するには、ライブラリをインストールする必要があります。以下のコマンドを使用します:
pip install pandas
データフレームの作成
Pandasの基本的な機能は、データフレームの作成です。データフレームは、行と列からなる2次元のデータ構造です。リスト、辞書、または他のデータソースからデータフレームを作成できます。
import pandas as pd
# 辞書からデータフレームを作成
data = {
"名前": ["Alice", "Bob", "Charlie"],
"年齢": [25, 30, 35],
"都市": ["New York", "Los Angeles", "Chicago"]
}
df = pd.DataFrame(data)
print("データフレーム:\n", df)
結果
データフレーム:
名前 年齢 都市
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
データの読み込みと書き込み
Pandasは、CSV、Excel、SQLデータベースなど、さまざまなデータソースからデータを読み込むことができます。また、データをこれらのフォーマットで保存することもできます。
import pandas as pd
# CSVファイルからデータを読み込む
df = pd.read_csv("data.csv")
print("CSVから読み込んだデータ:\n", df)
# データフレームをCSVファイルに書き込む
df.to_csv("output.csv", index=False)
結果
CSVから読み込んだデータ:
名前 年齢 都市
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
データの操作
Pandasでは、データのフィルタリング、選択、グループ化、集計、結合などの操作が簡単に行えます。
import pandas as pd
# 辞書からデータフレームを作成
data = {
"名前": ["Alice", "Bob", "Charlie", "hiroshi", "akira", "kaoru"],
"年齢": [25, 30, 35, 46, 35, 54],
"都市": ["New York", "Los Angeles", "Chicago", "New York", "Los Angeles", "Chicago"]
}
df = pd.DataFrame(data)
# データのフィルタリング
filtered_df = df[df["年齢"] > 30]
print("年齢が30以上のフィルタリング:\n", filtered_df)
# 特定の列を選択
selected_columns = df[["名前", "都市"]]
print("名前と都市の列を選択:\n", selected_columns)
# データのグループ化と集計
grouped_df = df.groupby("都市")[["年齢"]].mean()
print("都市ごとの平均年齢:\n", grouped_df)
# データの結合
df1 = pd.DataFrame({"名前": ["Alice", "Bob"], "スコア": [85, 90]})
df2 = pd.DataFrame({"名前": ["Alice", "Bob"], "年齢": [25, 30]})
merged_df = pd.merge(df1, df2, on="名前")
print("結合されたデータフレーム:\n", merged_df)
結果
年齢が30以上のフィルタリング:
名前 年齢 都市
2 Charlie 35 Chicago
3 hiroshi 46 New York
4 akira 35 Los Angeles
5 kaoru 54 Chicago
名前と都市の列を選択:
名前 都市
0 Alice New York
1 Bob Los Angeles
2 Charlie Chicago
3 hiroshi New York
4 akira Los Angeles
5 kaoru Chicago
都市ごとの平均年齢:
年齢
都市
Chicago 44.5
Los Angeles 32.5
New York 35.5
結合されたデータフレーム:
名前 スコア 年齢
0 Alice 85 25
1 Bob 90 30
データのクリーニング
Pandasは、欠損値の処理や重複データの削除など、データのクリーニング機能も提供しています。
import pandas as pd
# 辞書からデータフレームを作成
data = {
"名前": ["Alice", "Bob", "Charlie", "Alice", "akira", "kaoru"],
"年齢": [25, 30, 35, 25, 54],
"都市": ["New York", "Los Angeles", "Chicago", "New York", "Los Angeles", "Chicago"]
}
df = pd.DataFrame(data)
# 欠損値の処理
df["年齢"].fillna(df["年齢"].mean(), inplace=True)
print("欠損値を平均値で埋める:\n", df)
# 重複データの削除
df.drop_duplicates(inplace=True)
print("重複データを削除:\n", df)
結果
欠損値を平均値で埋める:
名前 年齢 都市
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
3 Alice 25 New York
4 akira 45 Los Angeles
5 kaoru 35 Chicago
重複データを削除:
名前 年齢 都市
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
4 akira 45 Los Angeles
5 kaoru 35 Chicago
実例
例題1: データの集計と可視化
以下の例では、Pandasを使用してデータを集計し、Matplotlibを使用して可視化します。
import pandas as pd
import matplotlib.pyplot as plt
# データフレームの作成
data = {
"名前": ["Alice", "Bob", "Charlie", "David", "Edward"],
"スコア": [85, 90, 78, 92, 88]
}
df = pd.DataFrame(data)
# スコアの平均を計算
mean_score = df["スコア"].mean()
print("平均スコア:", mean_score)
# スコアのヒストグラムをプロット
df["スコア"].plot(kind="hist", bins=5, alpha=0.7)
plt.xlabel("スコア")
plt.ylabel("頻度")
plt.title("スコアのヒストグラム")
plt.show()
結果
例題2: 時系列データの操作
以下の例では、Pandasを使用して時系列データを操作します。
import pandas as pd
# 日付範囲の作成
date_range = pd.date_range(start="2022-01-01", end="2022-01-10")
# ランダムなデータの作成
data = {"値": np.random.randn(len(date_range))}
df = pd.DataFrame(data, index=date_range)
print("時系列データ:\n", df)
# 移動平均の計算
df["移動平均"] = df["値"].rolling(window=3).mean()
print("移動平均を追加:\n", df)
結果
時系列データ:
値
2022-01-01 -0.855184
2022-01-02 0.476021
2022-01-03 -0.430998
2022-01-04 -0.834199
2022-01-05 1.054189
2022-01-06 0.784159
2022-01-07 -0.789507
2022-01-08 -0.569519
2022-01-09 0.388658
2022-01-10 -0.384353
移動平均を追加:
値 移動平均
2022-01-01 -0.855184 NaN
2022-01-02 0.476021 NaN
2022-01-03 -0.430998 -0.270054
2022-01-04 -0.834199 -0.263059
2022-01-05 1.054189 -0.070336
2022-01-06 0.784159 0.334716
2022-01-07 -0.789507 0.349614
2022-01-08 -0.569519 -0.191622
2022-01-09 0.388658 -0.323456
2022-01-10 -0.384353 -0.188405