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)などから簡単に一次元のデータ配列を作成することができます。