Pythonのデータ分析ライブラリであるPandasについて、基本的な使い方について解説します。
Pandasとは
PandasはPythonのデータ分析ライブラリの一つであり、テーブル形式のデータを効率的に扱うためのツールセットです。Pandasを使うことで、CSVやExcel、SQL、HTMLなどからデータを読み込み、操作や解析を行うことができます。PandasはNumPyとMatplotlibとともに、Pythonのデータサイエンス分野において広く使われています。
インストール
Pandasは、Pythonのパッケージマネージャーであるpipを使ってインストールすることができます。以下のコマンドを実行することで、Pandasをインストールできます。
pip install pandas
Pandasの基本的なデータ構造
Pandasには、次の2つの主要なデータ構造があります。
- Series:1次元のラベル付き配列
- DataFrame:2次元のテーブル形式のデータ
Series
Seriesは、1次元のラベル付き配列であり、NumPyの配列と似たような形式を持っています。以下は、Seriesの例です。
import pandas as pd
s = pd.Series([1, 3, 5, 7, 9])
print(s)
出力結果:
0 1
1 3
2 5
3 7
4 9
dtype: int64
Seriesは、NumPyの配列と比較して、ラベルを付けることができる点が異なります。上記の例では、0から4までのインデックスが付与されています。
DataFrame
DataFrameは、2次元のテーブル形式のデータであり、複数のSeriesをまとめたものです。DataFrameは、CSVやExcel、SQL、HTMLなどのデータから生成することができます。以下は、DataFrameの例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df = pd.DataFrame(data)
print(df)
出力結果:
name age city
0 Alice 25 New York
1 Bob 32 Paris
2 Charlie 18 London
3 Dave 47 San Francisco
4 Emily 21 Sydney
DataFrameは、行と列の両方にラベルを付けることができます。上記の例では、’name’、’age’、’city’というラベルが列に付与され、0から4までのインデックスが行に付与されています。
データの読み込みと書き込み
Pandasは、CSV、Excel、SQL、HTMLなどのデータを読み込むことができます。また、PandasのDataFrameをCSV、Excel、SQL、HTMLなどの形式で保存することもできます。
CSVの読み込み
CSVファイルを読み込むには、read_csv
関数を使用します。以下は、CSVファイルを読み込んでDataFrameを生成する例です。
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
CSVファイルのパスをread_csv
関数に渡すことで、CSVファイルを読み込むことができます。デフォルトでは、カンマ区切りのCSVファイルを読み込みます。
CSVの書き込み
DataFrameをCSVファイルとして保存するには、to_csv
関数を使用します。以下は、DataFrameをCSVファイルとして保存する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df = pd.DataFrame(data)
df.to_csv('data.csv', index=False, header=False)
to_csv
関数にファイル名として保存するCSVファイルのパスを渡すことで、DataFrameをCSVファイルとして保存することができます。index=False
を指定することで、行のインデックスをCSVファイルに書き込まないようにすることができます。header=False
を指定することで、1行目に出力されるヘッダーを非出力にできます。
データの操作
Pandasを使うことで、データを操作することができます。以下では、Pandasでよく使用されるデータ操作について解説します。
データの抽出
DataFrameから、特定の列や行を抽出することができます。
列の抽出
DataFrameから、特定の列を抽出するには、列のラベルを指定します。以下は、’name’列を抽出する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df = pd.DataFrame(data)
name = df['name']
print(name)
出力結果:
0 Alice
1 Bob
2 Charlie
3 Dave
4 Emily
Name: name, dtype: object
行の抽出
DataFrameから、特定の行を抽出するには、行のインデックスを指定します。以下は、2行目から4行目までの行を抽出する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df = pd.DataFrame(data)
rows = df[1:4]
print(rows)
出力結果:
name age city
1 Bob 32 Paris
2 Charlie 18 London
3 Dave 47 San Francisco
複数列の抽出
DataFrameから、複数の列を抽出するには、列のラベルのリストを指定します。以下は、’name’列と’age’列を抽出する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df = pd.DataFrame(data)
cols = df[['name', 'age']]
print(cols)
出力結果:
name age
0 Alice 25
1 Bob 32
2 Charlie 18
3 Dave 47
4 Emily 21
条件による抽出
DataFrameから、条件に合致する行を抽出することができます。以下は、’age’列が30以下の行を抽出する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df = pd.DataFrame(data)
young = df[df['age'] <= 30]
print(young)
出力結果:
name age city
0 Alice 25 New York
4 Emily 21 Sydney
データの結合
Pandasを使うことで、複数のDataFrameを結合することができます。
列方向の結合
DataFrameを列方向に結合するには、concat
関数を使用し、引数にaxis=1
を指定します。以下は、2つのDataFrameを列方向に結合する例です。
import pandas as pd
data1 = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21]}
df1 = pd.DataFrame(data1)
data2 = {'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df2 = pd.DataFrame(data2)
df = pd.concat([df1, df2], axis=1)
print(df)
出力結果:
name age city
0 Alice 25 New York
1 Bob 32 Paris
2 Charlie 18 London
3 Dave 47 San Francisco
4 Emily 21 Sydney
行方向の結合
DataFrameを行方向に結合するには、concat
関数を使用し、引数にaxis=0
を指定します。以下は、2つのDataFrameを行方向に結合する例です。
import pandas as pd
data1 = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 32, 18]}
df1 = pd.DataFrame(data1)
data2 = {'name': ['Dave', 'Emily'],
'age': [47, 21]}
df2 = pd.DataFrame(data2)
df = pd.concat([df1, df2], axis=0)
print(df)
出力結果:
name age
0 Alice 25
1 Bob 32
2 Charlie 18
0 Dave 47
1 Emily 21
列をキーとして結合
DataFrameを列をキーとして結合するには、merge
関数を使用します。以下は、2つのDataFrameを’key’列をキーとして結合する例です。
import pandas as pd
data1 = {'key': ['A', 'B', 'C', 'D'],
'value': [1, 2, 3, 4]}
df1 = pd.DataFrame(data1)
data2 = {'key': ['B', 'D', 'E', 'F'],
'value': [5, 6, 7, 8]}
df2 = pd.DataFrame(data2)
df = pd.merge(df1, df2, on='key')
print(df)
出力結果:
key value_x value_y
0 B 2 5
1 D 4 6
データの変換
Pandasを使うことで、データの変換を行うことができます。
列の追加
DataFrameに新しい列を追加するには、列を指定して新しい値を代入します。以下は、’gender’列を追加する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df = pd.DataFrame(data)
df['gender'] = ['F', 'M', 'M', 'M', 'F']
print(df)
出力結果:
name age city gender
0 Alice 25 New York F
1 Bob 32 Paris M
2 Charlie 18 London M
3 Dave 47 San Francisco M
4 Emily 21 Sydney F
列の削除
DataFrameから列を削除するには、drop
関数を使用します。以下は、’city’列を削除する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'gender': ['F', 'M', 'M', 'M', 'F'],
'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df = pd.DataFrame(data)
# 'gender'列を削除する
df.drop('gender', axis=1, inplace=True)
print(df.head())
出力結果:
name age city
0 Alice 25 New York
1 Bob 32 Paris
2 Charlie 18 London
3 Dave 47 San Francisco
4 Emily 21 Sydney
行の追加
DataFrameに新しい行を追加するには、append
関数を使用します。以下は、新しい行を追加する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 32, 18]}
df = pd.DataFrame(data)
new_data = {'name': ['Dave'],
'age': [47]}
new_row = pd.DataFrame(new_data)
df = df.append(new_row, ignore_index=True)
print(df)
出力結果:
name age
0 Alice 25
1 Bob 32
2 Charlie 18
3 Dave 47
行の削除
DataFrameから行を削除するには、drop
関数を使用します。以下は、インデックスが1の行を削除する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21]}
df = pd.DataFrame(data)
df = df.drop(1)
print(df)
出力結果:
name age
0 Alice 25
2 Charlie 18
3 Dave 47
4 Emily 21
データの集計
Pandasを使うことで、データの集計を行うことができます。
グループ化と集約
groupby
関数を使用して、データをグループ化し、sum
やmean
などの関数を使用して集約することができます。以下は、’gender’列でグループ化して、’age’列の平均値を計算する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
df_grouped = df.groupby('gender').mean()
print(df_grouped)
出力結果:
age
gender
F 23.000000
M 32.333333
クロス集計
crosstab
関数を使用して、2つの列の値をクロス集計することができます。以下は、’gender’列と’city’列の値をクロス集計する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'gender': ['F', 'M', 'M', 'M', 'F'],
'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df = pd.DataFrame(data)
df_crosstab = pd.crosstab(df['gender'], df['city'])
print(df_crosstab)
出力結果:
city London New York Paris San Francisco Sydney
gender
F 0 1 0 0 1
M 1 0 1 1 0
ピボットテーブル
pivot_table
関数を使用して、データをピボットテーブルに変換することができます。以下は、’gender’列を行に、’city’列を列に、’age’列の平均値を値にしたピボットテーブルを作成する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'gender': ['F', 'M', 'M', 'M', 'F'],
'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df = pd.DataFrame(data)
df_pivot = df.pivot_table(values='age', index='gender', columns='city', aggfunc='mean')
print(df_pivot)
出力結果:
city London New York Paris San Francisco Sydney
gender
F NaN 25.0 NaN NaN 21.0
M 18.0 NaN 32.0 47.0 NaN
データの積み上げ
stack
関数を使用して、データを積み上げることができます。以下は、’city’列を積み上げた例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'gender': ['F', 'M', 'M', 'M', 'F'],
'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df = pd.DataFrame(data)
df_stack = df.set_index(['name', 'gender']).stack().reset_index()
df_stack.columns = ['name', 'gender', 'variable', 'value']
print(df_stack)
出力結果:
name gender variable value
0 Alice F age 25
1 Alice F gender F
2 Alice F city New York
3 Bob M age 32
4 Bob M gender M
5 Bob M city Paris
6 Charlie M age 18
7 Charlie M gender M
8 Charlie M city London
9 Dave M age 47
10 Dave M gender M
11 Dave M city San Francisco
12 Emily F age 21
13 Emily F gender F
14 Emily F city Sydney
データの集約
groupby
関数を使用して、データをグループ化して集約することができます。以下は、’city’列でグループ化して’age’列の平均値を計算する例です。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'Dave', 'Emily'],
'age': [25, 32, 18, 47, 21],
'gender': ['F', 'M', 'M', 'M', 'F'],
'city': ['New York', 'Paris', 'London', 'San Francisco', 'Sydney']}
df = pd.DataFrame(data)
df_groupby = df.groupby(['city'])['age'].mean().reset_index()
df_groupby.columns = ['city', 'avg_age']
print(df_groupby)
出力結果:
city avg_age
0 London 18.0
1 New York 25.0
2 Paris 32.0
3 San Francisco 47.0
4 Sydney 21.0
まとめ
pandasは、Pythonにおいてデータ解析やデータ処理において必要不可欠なツールの一つです。pandasを使うことで、データの読み込みや加工、集約などの処理が容易になります。この記事では、pandasの基本的な使い方について紹介しましたが、まだまだ機能が豊富であるため、今後もpandasを活用してデータ処理を行っていきましょう。