Python

【初心者向け】Python pandas 「Series」の使い方をシンプルに解説

はじめに

無料で使えるPythonのデータ解析ライブラリ 「pandas」のデータ型について解説します。
pandas では以下2つのデータ型がよく使われます。

名前機能
Series配列のようなデータ形式です。表の縦・横の一方向(一次元)に対応します
DataFrame表のようなデータ形式です。表の縦・横両方(二次元)に対応します

DataFrame

極簡単に言ってしまうと「Series」が集まったデータ型です。表などの二次元のデータを扱いやすくする機能を搭載しています。

Series

DataFrameのベースとなるデータ型です。行などの、一次元のデータを扱いやすくする機能を搭載しています。

DataFrameとSeriesの対応
今回の記事の内容

今回は上記pandasの2つのデータ型の内、ベースとなる「Series」について紹介します。Pythonやpandasの初心者の方でもなるべく分かりやすいように、シンプルなコードで解説します。

DataFrameの使い方については以下の記事をご覧ください。

環境

この記事は以下の環境で作成しています。

Python   3.9.6
pandas4.7.2
OS            Windows10                  

「Windows10 + Python + pandas + venv」の環境で作成しています。(AnacondaやJupiterNotebookは使用していません)

「環境やインストール方法が知りたい」という方は、以下の記事をご覧ください。

Seriesの使い方

Seriesについての解説内容は以下の通りです (クリックで各項目に移動できます)。

Seriesの作成・名前を付ける

Seriesの操作

Seriesの結合・配列/辞書を作る

Seriesの機能は非常に多く、ここですべての機能は紹介しきれません。他の機能が気になる方は、是非公式ドキュメントも参照してみてください。

Seriesの作成・名前をつける

配列から作成

作成した配列をpandasのSeries関数(コンストラクタ)に渡します。
Seriesでは、要素(インデックス)に名前を付けることができますが、配列には要素名がありません。そのため0からの連番が自動的に設定されます。

import pandas as pd

# 配列からSeriesを作成します
list = [1,2,3]
series_list = pd.Series(list)
print(series_list)

"""
# 実行結果:
0    10
1    11
2    12
dtype: int64
"""

辞書(Dictionary)から作成

作成した辞書をpandasのSeries関数(コンストラクタ)に渡します。
下記の”Zero”などの辞書の要素名は、Seriesの要素名としてそのまま引き継がれます。

import pandas as pd

# 辞書(Dictionary)からSeriesを作成します
dict = { "Zero":10, "First":11, "Second":12 }
series_dict = pd.Series(dict)
print(series_dict)

"""
# 実行結果:
Zero      10
First     11
Second    12
dtype: int64
"""

要素(index)に名前を付ける

index関数を使用します。
前述の配列からSeriesを作成した場合など、要素名を別途設定する場合に使用します。

import pandas as pd

# 配列からSeriesを作成します
list = [10,11,12]
series_list = pd.Series(list)

# 要素名を追加します
series_list.index = ["Zero","First","Second"]
print(series_list)

"""
# 実行結果:
Zero      10
First     11
Second    12
dtype: int64
"""

Seriesに名前を付ける

nameプロパティを使って、Series自体にも名前を付けることができます。
(DataFrameを含めて使用する際に、便利になる機能です)

import pandas as pd

# 配列からSeriesを作成します
list = [10,11,12]
series_list = pd.Series(list)

# Seriesに名前を付けます
series_list.name = "Series from list"
print(series_list)

"""
# 実行結果:
Zero      10
First     11
Second    12
Name: Series from list, dtype: int64  <-- Name が設定されます
"""

Seriesの操作

要素の取得・変更・追加などの、Seriesの操作方法は以下の通りです。

データの取得

要素の番号・名称を指定します。
要素名(番号)を直接指定するか、「at・iat・loc・iloc」プロパティを使用します。

「at・iat・loc・iloc」は要素名称(番号)で、Seriesのデータへアクセスするプロパティです、[]で指定します。 「iあり」は番号、「iなし」は名称指定に使用します。

プロパティの説明や効能などはやや難しくなるので、ここでは「データへアクセスするための、特別な変数のようなもの」として見てください。

import pandas as pd

# Seriesを作成します
# 配列、要素名を直接Series関数に渡して作成しています
series = pd.Series([10,11,12], index=["Zero","First","Second"])

# 番号を直接指定して取得
value0 = series[0]
print(value0)

# 名称を直接指定して取得
value1st = series["First"]
print(value1st)

# atで取得
valueAt = series.at["Second"]
print(valueAt)

# iatで取得
valueIAt = series.iat[0]
print(valueIAt)

"""
# 実行結果:
10
11
12
10
"""

※ loc, ilocも使い方は同じです。

データの変更

要素の番号・名称を指定します。
直接指定するか「at・iat・loc・iloc」を使用します。

import pandas as pd

# Seriesを作成します
# 配列、要素名を直接Series関数に渡して作成しています
series = pd.Series([10,11,12], index=["Zero","First","Second"])

# 番号で指定して変更
series[0] = 100 
print(series[0])

# 名称で指定して変更
series["First"] = 101
print(series["First"])

# atで指定して変更
series.at["Second"] = 102
print(series.at["Second"])

# iatで指定して変更
series.iat[0] = 1000
print(series.iat[0])

"""
# 実行結果:
100
101
102
1000
"""

要素の追加

新しい要素名称(番号)にデータを代入します。
”番号”で指定する場合「at/loc」を使用してください。「直接指定 / iat / iloc」を使うと、存在しない要素へのアクセスとしてエラーになります。

import pandas as pd

# Seriesを作成します
# 配列、要素名を直接Series関数に渡して作成しています
series = pd.Series([10,11,12], index=["Zero","First","Second"])

# at(番号)で追加
series.at = 13

# NG:以下の方法では追加できない
# series      = 13
# series.iat  = 13
# series.iloc = 13

# 名称で追加
series["Fourth"] = 14

# atで追加
series.at["Fifth"] = 15

print(series)

"""
# 実行結果:
Zero      10
First     11
Second    12
3         13
Fourth    14
Fifth     15
dtype: int64
"""

要素の抽出

スライス(:)を使って、名称・番号を「始点:終点」の形で範囲指定します。抽出したデータもSeries型として返されます。

番号を使った場合のみ、スライスの終点より「ひとつ少ない番号」までが取得されので注意してください。以下のコードは、すべて同じ範囲を抽出するコードです。

import pandas as pd

# Seriesを作成します
# 配列、要素名を直接Series関数に渡して作成しています
series = pd.Series([10,11,12], index=["Zero","First","Second"])

# 名称を指定(直接指定・loc)
part_name     =     series["Zero":"Second"]
part_name_loc = series.loc["Zero":"Second"]

# 番号を指定(直接指定・iloc)
part_no       =      series[0:3]
part_no_iloc  = series.iloc[0:3]

# 抽出結果の表示
print(part_name)
print(part_name_loc)
print(part_no)
print(part_no_iloc)

"""
# 実行結果:
# 同じ内容が4つ表示される

Zero      10
First     11
Second    12
dtype: int64
"""

要素の削除

drop関数を使います。削除したい要素を「名称・番号」で指定します。
要素が削除されたSeriesは関数の「戻り値」として返されます。drop関数を呼び出すだけでは要素は変更されません。

drop関数を呼び出したSeriesを変更するには、以下のように、戻り値を代入するように記述します。

import pandas as pd

# Seriesを作成します
# 配列、要素名を直接Series関数に渡して作成しています
list = [10,11,12]
series = pd.Series([10,11,12], index=["Zero","First",2])

# 番号で削除
series = series.drop(2)

# 名称で削除
series = series.drop("First")

print(series)

"""
# 実行結果:
Zero    10
dtype: int64
"""

Seriesの結合

Series同士」を結合するにはappend関数を使います。

append関数も呼び出すだけではSeriesに何も影響を与えません。結合されたSeriesは関数の戻り値で返されます。

append関数を呼び出したSeriesを変更するには、 以下のように、戻り値を代入するように記述します。

import pandas as pd

# Seriesを作成します
# 配列、要素名を直接Series関数に渡して作成しています
series1 = pd.Series([10,11,12], index=["Zero", "First","Second"])
series2 = pd.Series([20,21,22], index=["Third","Fourth","Fifth"])

series1 = series1.append(series2)

print(series1)

"""
# 実行結果:
Zero      10
First     11
Second    12
Third     20
Fourth    21
Fifth     22
dtype: int64
"""

Seriesから配列・辞書を作る

配列を作成する場合は「to_list関数」、辞書を作成する場合は「to_dict関数」を使用します。

import pandas as pd

# Seriesを作成します
# 配列、要素名を直接Series関数に渡して作成しています
series = pd.Series([10,11,12], index=["Zero","First","Second"])

list = []
dict = {}

# Seriesから配列を作成
list = series.tolist()

# Seriesから辞書を作成
dict = series.to_dict()

print(list)
print(dict)

"""
# 実行結果:
[10, 11, 12]
{'Zero': 10, 'First': 11, 'Second': 12}
"""

まとめ

無料で使えるPythonのデータ解析ライブラリ 「pandas」でよく使われるデータ型の内、Seriesの使い方について解説しました。参考になればうれしいです。

応援・要望お待ちしてます

ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。

ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です