はじめに
Pandasは、Pythonでデータ分析を行うための非常に便利なライブラリです。
データの操作や分析を簡単にするための機能が豊富に揃っており、特にデータフレーム(表形式のデータ構造)の扱いに優れています。
インストール
pip install pandas
基本概念
Series
: 一次元のデータ(リストや配列に似たもの)
DataFrame
: 二次元のデータ(表形式のデータ)
Seriesの基本操作
.Seriesの作成
import pandas as pd
# リストからSeriesを作成
data = [10, 20, 30, 40]
s = pd.Series(data)
print(s)
.インデックスの指定
# インデックスを指定してSeriesを作成
s = pd.Series(data, index=['a', 'b', 'c', 'd'])
print(s)
.基本操作
# 特定のインデックスの値にアクセス
print(s['b']) # 出力: 20
# Seriesの要素に演算を適用
print(s + 10) # 出力: a 20
# b 30
# c 40
# d 50
DataFrameの基本操作
.DataFrameの作成
# 辞書からDataFrameを作成
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
print(df)
.データの選択とフィルタリング
# 列の選択
print(df['Name'])
# 行の選択(インデックスで選択)
print(df.loc[1]) # 出力: Name Bob
# Age 30
# City Los Angeles
# 条件に基づくフィルタリング
print(df[df['Age'] > 28]) # 出力: Name Age City
# Bob 30 Los Angeles
# Charlie 35 Chicago
.データの集計
# 基本統計量の取得
print(df.describe())
# 特定の列でグループ化して集計
print(df.groupby('City').mean()) # この例では平均年齢を計算
データの入出力
# CSVファイルの読み込み
df = pd.read_csv('data.csv')
# CSVファイルへの書き込み
df.to_csv('output.csv', index=False)
データの前処理
.欠損値の処理
# 欠損値の確認
print(df.isnull().sum())
# 欠損値の削除
df_cleaned = df.dropna()
# 欠損値の補完
df_filled = df.fillna(value='Unknown')
.データの変換
# データ型の変換
df['Age'] = df['Age'].astype(float)
時系列データの操作
.日時データの作成と操作
# 日時データの作成
dates = pd.date_range(start='2023-01-01', periods=5, freq='D')
df_dates = pd.DataFrame({'Date': dates, 'Value': [10, 20, 30, 40, 50]})
print(df_dates)
# 日時データのインデックス設定
df_dates.set_index('Date', inplace=True)
print(df_dates)
# 日時データの抽出
print(df_dates.loc['2023-01-03']) # 出力: Value 30
.データのリサンプリング(例えば、日単位から月単位へ)
df_resampled = df_dates.resample('M').sum()
print(df_resampled)
.データフレームの結合(列を追加)
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['Alice', 'Bob', 'Charlie']})
df2 = pd.DataFrame({'ID': [1, 2, 3], 'Age': [25, 30, 35]})
df_merged = pd.merge(df1, df2, on='ID')
print(df_merged)
.データフレームの連結(行を追加)
df3 = pd.DataFrame({'ID': [4, 5], 'Name': ['David', 'Eva'], 'Age': [40, 45]})
df_concat = pd.concat([df_merged, df3], ignore_index=True)
print(df_concat)
.ピボットテーブルの作成
df_pivot = pd.DataFrame({
'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],
'Category': ['A', 'B', 'A', 'B'],
'Value': [10, 20, 30, 40]
})
pivot_table = pd.pivot_table(df_pivot, values='Value', index='Date', columns='Category', aggfunc='sum')
print(pivot_table)
.クロス集計の作成
cross_tab = pd.crosstab(df_pivot['Category'], df_pivot['Date'], values=df_pivot['Value'], aggfunc='sum')
print(cross_tab)
可視化
Pandasには、簡単なデータ可視化機能も含まれていますが、matplotlibやseabornなどのライブラリと組み合わせて使うことが多いです。
import matplotlib.pyplot as plt
# データフレームをプロット
df_dates['Value'].plot(kind='line')
plt.title('Value Over Time')
plt.xlabel('Date')
plt.ylabel('Value')
plt.show()
データのクリーニングと前処理
.重複行を削除
df_unique = df.drop_duplicates()
print(df_unique)
.データの変換と標準化
# 列のデータ型変換
df['Age'] = df['Age'].astype(float)
# データの標準化(平均0、標準偏差1に変換)
df['Age_standardized'] = (df['Age'] - df['Age'].mean()) / df['Age'].std()
print(df)
まとめ
Pandasは、Pythonでデータ分析を効率的に行うための強力なライブラリです。
Series(一次元データ)とDataFrame(二次元データ)を使ってデータの操作、集計、前処理を簡単に行えます。
基本的な操作として、データの作成、選択、フィルタリング、集計、リサンプリング、結合、ピボットテーブルの作成が可能です。さらに、データの可視化もサポートしており、分析結果を視覚的に確認することができます。