Pandasを使ったSeriesの作り方と値の追加・更新・削除

PandasはPythonのモジュールの1つでデータ分析を効率的に行うことができるように行列データを扱いやすくしたり、集計を行ったデータを簡単に可視化したりできるものです。

Pandasの基本データ構造には大きく分けてSeriesとDataFrameがあります。

この記事ではPandasの基本データ構造の1つであるSeriesの作り方と値の追加・更新・削除について解説します。

Seriesはリストのように順序を持った一次元のデータ列と、そのデータが何かを示す見出しを格納するオブジェクトです。

(Pandasはオープンソース(BSDライセンス)で公開されており、個人/商用問わず、誰でも無料で利用することができます。)

スポンサーリンク

PandasのSeriesの使い方

Pandasはオープンソース(BSDライセンス)で公開されているデータ分析を効率的に行うことができるように行列データを扱いやすくしたり、集計を行ったデータを簡単に可視化したりできるモジュールです。

Pandasの基本データ構造には大きく分けてSeriesとDataFrameがあり、今回はSeriesについてSeriesの作成、更新、削除などを解説します。

Pandasのインストール

Pandasはオープンソースで開発されているパッケージなので「pip」コマンドを利用してインストールする必要があります。

pip install pandas

コマンドプロンプトで上記のコマンドを入力してインストールします。

C:\>pip install pandas
Collecting pandas
  Downloading pandas-1.2.0-cp39-cp39-win_amd64.whl (9.3 MB)
     |████████████████████████████████| 9.3 MB ...
Collecting numpy>=1.16.5
  Downloading numpy-1.19.5-cp39-cp39-win_amd64.whl (13.3 MB)
     |████████████████████████████████| 13.3 MB 6.8 MB/s
Collecting python-dateutil>=2.7.3
  Downloading python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)
     |████████████████████████████████| 227 kB ...
Requirement already satisfied: six>=1.5 in c:\users\st_ta\appdata\roaming\python\python39\site-packages (from python-dateutil>=2.7.3->pandas) (1.15.0)
Collecting pytz>=2017.3
  Downloading pytz-2020.5-py2.py3-none-any.whl (510 kB)
     |████████████████████████████████| 510 kB 6.4 MB/s
Installing collected packages: pytz, python-dateutil, numpy, pandas
Successfully installed numpy-1.19.5 pandas-1.2.0 python-dateutil-2.8.1 pytz-2020.5

C:\>

上記のような表示がでればインストールは完了です。

リスト(list)からのSeriesの作成

Pandasでリスト(list)からSeriesを作成するにはSeries化したいリスト(list)データを渡します。

import pandas as pd

list_numbers = [ 100, 200, 300, 400, 500 ]
series_numbers = pd.Series( list_numbers )
print( series_numbers )

上記のコマンドを実行すると

0    100
1    200
2    300
3    400
4    500
dtype: int64

と表示されます。

右列の数字がインデックスで左がその値を示しています。

辞書(dict)からのSeriesの作成

Pandasで辞書(dict)からSeriesを作成するにはSeries化したい辞書(dict)データを渡します。

import pandas as pd

taro = { "英語":92, "数学":75, "国語":80, "社会":63, "理科":78 }
series_taro = pd.Series( taro )
print( series_taro )
jiro = { "英語":65, "数学":80, "国語":48, "社会":39, "理科":84 }
series_jiro = pd.Series( jiro )
print( series_jiro )

上記のコードを実行すると

英語    92
数学    75
国語    80
社会    63
理科    78
dtype: int64
英語    65
数学    80
国語    48
社会    39
理科    84
dtype: int64

になります。

右列の文字列ががインデックスで、左列がその値を示しています。

スカラー値を使ったSeriesの作成

PandasのSeriesはスカラー値を使って生成することもできます。

スカラー値とは
プログラミング言語におけるchar・int・floatといった単一の値だけを保持するデータ型のことです。逆に、配列・リスト・辞書など複合的な値を保持するデータ型は、非スカラ型と呼ばれます。
#スカラー値
import pandas as pd

index_subjects = [ "英語", "数学", "国語", "社会", "理科" ]
series_taro = pd.Series( 10, index=index_subjects )
print( series_taro )

上記のコードを実行すると

英語    10
数学    10
国語    10
社会    10
理科    10
dtype: int64

となり、すべての値がスカラー値の「10」で生成されいることがわかります。

Seriesにインデックスを設定する(index)

PandasのSeriesにインデックスを指定して設定するにはindexというキーワード引数(Positional Argument)を指定して行います。

import pandas as pd

#Seriesインデックスをつける(index)
taro = [ 92, 75, 80, 63, 78 ]
series_taro = pd.Series( taro, index=[ "英語", "数学", "国語", "社会", "理科" ] )
print( series_taro )

上記の実行結果は

英語    92
数学    75
国語    80
社会    63
理科    78
dtype: int64

となりSeriesに指定したindexが設定されています。

Seriesに名前を設定する(name)

PandasのSeriesに名前を指定して設定するにはnameというキーワード引数(Positional Argument)を指定して行います。

import pandas as pd

#Series名をつける(name)
taro = [ 92, 75, 80, 63, 78 ]
index_subjects = [ "英語", "数学", "国語", "社会", "理科" ]
series_name = "太郎の得点"
series_taro = pd.Series( taro, name=series_name, index=index_subjects )
print( series_taro )

上記の実行結果は

英語    92
数学    75
国語    80
社会    63
理科    78
Name: 太郎の得点, dtype: int64

となりSeriesに指定したnameが設定されています。

Seriesを指定した型でSeries化する(dtype)

PandasのSeriesを指定した型でSeries化するにはdtypeというキーワード引数(Positional Argument)を指定して行います。

import pandas as pd

#リスト(list)を型指定なしでSeries化する
taro = [ 92, 75, 80, 63, 78 ]
series_taro = pd.Series( taro )
print( series_taro )

#リスト(list)を指定した型(float)でSeries化する(dtype)
taro = [ 92, 75, 80, 63, 78 ]
series_taro = pd.Series( taro, dtype=float )
print( series_taro )

上記の実行結果は

0    92
1    75
2    80
3    63
4    78
dtype: int64
0    92.0
1    75.0
2    80.0
3    63.0
4    78.0
dtype: float64

となりSeriesに指定した型でSeriesが生成されています。

Seriesのコピーを作成を指示しSeries化する(copy)

PandasのSeriesの生成時にオブジェクトのコピーを生成するか、しないかを指定してSeries化するにはcopyというキーワード引数(Positional Argument)を指定して行います。

copyにTrueが指定されるとコピー生成、Falseが指定されるとコピーを生成しません。

import pandas as pd

#copy生成を指定しSeries化する(copy)
original = { "英語":92, "数学":75, "国語":80, "社会":63, "理科":78 }
series_original = pd.Series( original, name="Original Series" )
print( series_original )

#copy生成を指定しSeries化する(copy)
series_copy_true = pd.Series( series_original, copy=True, name="Coypy True Series" )

#Seriesの値を変更(copy=Trueなのでseries_originalの値は変化しない)
series_copy_true[ "英語" ] = 100
print( 'series_copy_true[ "英語" ] = 100 を実行' )

#series_originalの値は変更されない
print( series_original )
print( series_copy_true )

#copy生成しないを指定しSeries化する(copy)
series_copy_false = pd.Series( series_original, copy=False, name="Coypy False Series" )

#Seriesの値を変更(copy=Falseなのでseries_originalの値も変化する)
series_copy_false[ "英語" ] = 20
print( 'series_copy_true[ "英語" ] = 20 を実行' )

#series_originalの値も変更される
print( series_original )
print( series_copy_false )

上記の実行結果は

英語    92
数学    75
国語    80
社会    63
理科    78
Name: Original Series, dtype: int64
series_copy_true[ "英語" ] = 100 を実行
英語    92
数学    75
国語    80
社会    63
理科    78
Name: Original Series, dtype: int64
英語    100
数学     75
国語     80
社会     63
理科     78
Name: Coypy True Series, dtype: int64
series_copy_true[ "英語" ] = 20 を実行
英語    20
数学    75
国語    80
社会    63
理科    78
Name: Original Series, dtype: int64
英語    20
数学    75
国語    80
社会    63
理科    78
Name: Coypy False Series, dtype: int64

となりSeriesのコピー生成の指示がうまく行っていることが確認できます。。

Seriesの値の追加

Seriesの値を追加するにはSeriesのインデックスを指定して値を追加します。

import pandas as pd

list_numbers = [ 100, 200, 300, 400, 500 ]
series_numbers = pd.Series( list_numbers )
print( series_numbers )

series_numbers[ 5 ] = 600 #値を追加
print( series_numbers )

上記のコードを実行すると

0    100
1    200
2    300
3    400
4    500
dtype: int64
0    100
1    200
2    300
3    400
4    500
5    600
dtype: int64

と値が追加されていることがわかります。

Seriesの値の更新

Seriesの値を更新するにはSeriesのインデックスを指定して値を更新します。

import pandas as pd

list_numbers = [ 100, 200, 300, 400, 500 ]
series_numbers = pd.Series( list_numbers )
print( series_numbers )

series_numbers[ 1 ] = 2
print( series_numbers )

上記のコードを実行すると

0    100
1    200
2    300
3    400
4    500
dtype: int64
0    100
1      2
2    300
3    400
4    500
dtype: int64

と値が更新されていることがわかります。

Seriesの値の削除

Seriesの値を削除するにはSeriesのインデックスを指定してdropメソッドで削除します。

import pandas as pd

list_numbers = [ 100, 200, 300, 400, 500 ]
series_numbers = pd.Series( list_numbers )
print( series_numbers )

series_numbers = series_numbers.drop( 1 )
print( series_numbers )

上記のコードを実行すると

0    100
1    200
2    300
3    400
4    500
dtype: int64
0    100
2    300
3    400
4    500
dtype: int64

と値が削除されていることがわかります。

まとめ

PandasのSeriesはリストのように順序を持った一次元のデータ列と、そのデータが何かを示す見出しを格納するオブジェクトです。

リスト(list)や辞書(dict)などから簡単に一次元のデータ配列を作成することができます。

スポンサーリンク
スポンサーリンク
Python学習におすすめの本
Python
スポンサーリンク
ソフトウェア開発日記
タイトルとURLをコピーしました