2022年4月24日日曜日

【pandas】Seriesによるシリーズの作成

 データ分析用ライブラリpandasには1次元のデータ構造Series(シリーズ)と2次元のデータ構造Dataframe(データフレーム)の2種類のデータ構造がある。Series(シリーズ)の作成にはpandas.Seriesを用いる。

 ライブラリpandasを使うにはインポートが必要。通常次のようにpdと略されてインポートされる。

import pandas as pd


1. 書式

 pandas.Seriesの書式は以下の通り。

pandas.Series(data=None, index=None, dtype=None, name=None, copy=False)
引数 意味
data 用いるデータ。ndarray、イテラブルオブジェクト、辞書、データフレームなど
index ロウ名(行名)。データにロウ名がない場合、必要に応じて指定する。指定が無ければ0からの数字の列(0, 1, 2・・・)が用いられる。
dtype データタイプの指定
name シリーズ名の指定。文字列または数値
copy 入力データからコピーするかどうか。入力データがndarrayまたはseriesの場合に影響する。
Falseの場合参照渡しとなる。Trueの場合コピーを作成し参照渡しとならない。


2. シリーズの作成

 pd.Seriesで引数にデータを与えるとデータシリーズを作成できる。データの形式としてはリスト、タプル、ndarray、辞書、データシリーズなどを用いることができる。
 データとして1行のリストを与えた場合。indexは与えていないため、行名は0からの連番の数字になる。

import pandas as pd

ser = pd.Series([204128, 136000, 20968, 54130])
print(ser)

実行結果

0    204128
1    136000
2     20968
3     54130
dtype: int64


 行名を指定する場合、indexを与える。

import pandas as pd

ser = pd.Series(data=[204128, 136000, 20968, 54130], 
                index=['USA', 'China', 'Russia', 'Japan'])
print(ser)

実行結果

USA       204128
China     136000
Russia     20968
Japan      54130
dtype: int64


 nameでシリーズに名前が付けられる。

import pandas as pd

ser = pd.Series(data=[204128, 136000, 20968, 54130], 
                index=['USA', 'China', 'Russia', 'Japan'],
                name='GDP')
print(ser)

実行結果

USA       204128
China     136000
Russia     20968
Japan      54130
Name: GDP, dtype: int64


 キーと値からなる辞書型データを用いるとキーが行名となる。

import pandas as pd

gdp = {'USA':204128, 'China':136000, 'Russia':20968, 'Japan':54130}
ser = pd.Series(gdp, name='GDP')
print(ser)

実行結果

USA       204128
China     136000
Russia     20968
Japan      54130
Name: GDP, dtype: int64


 入力データがnumpy.nearraySeriesの場合、copyを指定しないとデフォルトのcopy=Falseとなる。この場合参照渡しとなるため、元のデータの変更がSeriesのデータに反映される。

import numpy as np
import pandas as pd

gdp = np.array([204128, 136000, 20968, 54130])
country = ['USA', 'China', 'Russia', 'Japan']
ser = pd.Series(data=gdp, 
                index=country,
                name='GDP')

gdp[0] = 355555
print(ser)

実行結果

USA       355555
China     136000
Russia     20968
Japan      54130
Name: GDP, dtype: int32


 copy=Trueとすると、データのコピーが作成されるため、元データの変更がSeriesに反映されなくなる。

import numpy as np
import pandas as pd

gdp = np.array([204128, 136000, 20968, 54130])
country = ['USA', 'China', 'Russia', 'Japan']
ser = pd.Series(data=gdp, 
                index=country,
                name='GDP',
                copy=True)

gdp[0] = 355555
print(ser)

実行結果

USA       204128
China     136000
Russia     20968
Japan      54130
Name: GDP, dtype: int32


3. リファレンス

pandas > pandas.Series

使用したバージョン:Python 3.8.12/pandas 1.4.0

0 件のコメント:

コメントを投稿