pandasの基礎
pandasは、Pythonでデータ分析を効率的に行うための強力なライブラリです。主に以下のような機能を提供します。
-
DataFrame: 表形式のデータを扱うためのデータ構造。ExcelのスプレッドシートやSQLのテーブルのようなイメージです。
-
Series: 1次元のラベル付き配列。DataFrameの各列はSeriesとして表現されます。
pandasを使うことで、データの読み込み、書き出し、クリーニング、変換、分析などが容易になります。
pandasのインポート
pandasを使うには、まずインポートする必要があります。慣例的に pd というエイリアスをつけてインポートします。
import pandas as pd
よく使うコマンド
pandasでよく使う基本的なコマンドをいくつかご紹介します。
データの作成
Seriesの作成:
s = pd.Series([10, 20, 30, 40, 50])
print(s)
DataFrameの作成 (リストから):
data = [['Alice', 25], ['Bob', 30], ['Charlie', 28]]
df = pd.DataFrame(data, columns=['Name', 'Age'])
print(df)
DataFrameの作成 (辞書から):
data = {'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 28]}
df = pd.DataFrame(data)
print(df)
データの読み込みと書き出し
CSVファイルの読み込み:
df = pd.read_csv('your_data.csv')
print(df.head()) # 先頭の数行を表示
CSVファイルへの書き出し:
df.to_csv('output.csv', index=False) # index=Falseでインデックスを出力しない
Excelファイルの読み込み:
df = pd.read_excel('your_data.xlsx')
print(df.head())
Excelファイルへの書き出し:
df.to_excel('output.xlsx', index=False)
データの確認
先頭の数行を表示:
df.head()
末尾の数行を表示:
df.tail()
DataFrameの概要:
df.info()
数値データの統計量:
df.describe()
列名の一覧:
df.columns
インデックスの一覧:
df.index
DataFrameの形状 (行数, 列数):
df.shape
データの選択
特定の列を選択:
ages = df['Age']
print(ages.head())
複数の列を選択:
subset = df[['Name', 'Age']]
print(subset.head())
行を選択 (インデックス):
first_row = df.loc[0]
print(first_row)
行を選択 (条件):
older_than_25 = df[df['Age'] > 25]
print(older_than_25)
特定の行と列を選択 (loc):
name_of_first_row = df.loc[0, 'Name']
print(name_of_first_row)
特定の行と列を選択 (iloc - 整数インデックス):
first_element = df.iloc[0, 0]
print(first_element)
データの操作
新しい列の追加:
df['City'] = ['Tokyo', 'Osaka', 'Kyoto']
print(df)
列の削除:
df = df.drop('City', axis=1) # axis=1は列を意味する
print(df)
データのフィルタリング:
filtered_df = df[df['Age'] >= 28]
print(filtered_df)
データのソート:
sorted_df = df.sort_values(by='Age')
print(sorted_df)
欠損値の処理:
# 欠損値があるDataFrameを仮定
data_with_na = {'Name': ['Alice', 'Bob', 'Charlie', None],
'Age': [25, None, 28, 31]}
df_na = pd.DataFrame(data_with_na)
print(df_na)
# 欠損値の確認
print(df_na.isnull())
# 欠損値の削除
df_dropped_na = df_na.dropna()
print(df_dropped_na)
# 欠損値を特定の値で埋める
df_filled_na = df_na.fillna(0)
print(df_filled_na)
# 欠損値を平均値で埋める
mean_age = df_na['Age'].mean()
df_filled_mean = df_na.fillna({'Age': mean_age, 'Name': 'Unknown'})
print(df_filled_mean)
グループ化 (groupby):
data_for_group = {'Department': ['Sales', 'Sales', 'HR', 'HR', 'Sales'],
'Employee': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Salary': [5000, 6000, 4500, 5500, 5200]}
df_group = pd.DataFrame(data_for_group)
print(df_group)
grouped = df_group.groupby('Department')
print(grouped.mean())
print(grouped.sum())
print(grouped.size())
使用例
簡単な使用例として、CSVファイルを読み込み、特定の条件でフィルタリングし、結果を別のCSVファイルに保存する流れを示します。
CSVファイルの作成 (例として)
まず、以下のような内容の sample.csv ファイルを作成します。
Name,Age,City
Alice,25,Tokyo
Bob,30,Osaka
Charlie,28,Tokyo
David,35,Kyoto
Eve,22,Osaka
pandasを使った処理
import pandas as pd
# CSVファイルの読み込み
df = pd.read_csv('sample.csv')
print("読み込んだデータ:\n", df)
# 25歳より年上の人をフィルタリング
older_people = df[df['Age'] > 25]
print("\n25歳より年上の人:\n", older_people)
# 東京に住んでいる人をフィルタリング
tokyo_residents = df[df['City'] == 'Tokyo']
print("\n東京に住んでいる人:\n", tokyo_residents)
# フィルタリングされたデータを新しいCSVファイルに保存
older_people.to_csv('older_people.csv', index=False)
tokyo_residents.to_csv('tokyo_residents.csv', index=False)
print("\nフィルタリングされたデータを 'older_people.csv' と 'tokyo_residents.csv' に保存しました。")
この例では、read_csvでデータを読み込み、条件を使って行をフィルタリングし、to_csvで結果を保存しています。 pandasは非常に多機能であり、ここで紹介したのはほんの一部です。しかし、これらの基本的な操作を理解することで、データ分析の第一歩を踏み出すことができるでしょう。