[Python] pandas の使い方

Pythonのデータ分析ライブラリであるPandasについて、基本的な使い方について解説します。

目次

Pandasとは

PandasはPythonのデータ分析ライブラリの一つであり、テーブル形式のデータを効率的に扱うためのツールセットです。Pandasを使うことで、CSVやExcel、SQL、HTMLなどからデータを読み込み、操作や解析を行うことができます。PandasはNumPyとMatplotlibとともに、Pythonのデータサイエンス分野において広く使われています。

インストール

Pandasは、Pythonのパッケージマネージャーであるpipを使ってインストールすることができます。以下のコマンドを実行することで、Pandasをインストールできます。

pip install pandas

Pandasの基本的なデータ構造

Pandasには、次の2つの主要なデータ構造があります。

  1. Series:1次元のラベル付き配列
  2. 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関数を使用して、データをグループ化し、summeanなどの関数を使用して集約することができます。以下は、’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を活用してデータ処理を行っていきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次