pandasの使い方

2.2.Seriesの構造と作成

Seriesは一次配列を表現するデータの集合体です。
pandas.Series( data = None, index = None, dtype = None, name = None, copy = False, fastpath = False )
引数 概要
data 格納するデータを指定します(下図青枠)。
index data一つ一つに対応するlabelを指定します(下図赤枠)。
指定しない場合は連番[0, 1, 2, …]が自動的に入ります。
dtype 指定したdata(下図青枠)のデータ型(int, float, str等)を指定します。
指定しない場合は、dataから自動的に設定されます (dataに文字列が含まれると、数値もstr型になります)。
name Seriesの名前を指定します(下図橙枠)。
名前はDataFrameに変換する際用いられます。

Series:一次配列
Series:一次配列

Noは自動的に付与され、0からの連番(0, 1, 2, …)になります。
Seriesを新規に作成する場合、dataには次のいずれかを用います。

  • リスト(Python標準) :[*, *, …]
  • タプル(Python標準) :( *, *, … )
  • Dictionary(Python標準) :{ 'x' : *, 'y' : *, … }
  • 一次元のndarray(Numpy配列) :array([ *, *, … ])

Seriesは一次配列であるため、行や列といった軸方向の概念はありません。 柔軟に(?)対応します(DataFrameは行、列の方向に注意が必要です)。
  1. dataの定義
  2. indexの定義
  3. nameの定義
  4. dtypeの定義
  5. dataの型
  6. Series作成時のエラー

(1)dataの定義

a)リスト、タプル、一次元Numpy配列

pandasをpdで表すとして(import pandas as pd)、
pd.Series( *** ) または pd.Series( data = *** )
*** = [*, *, …] or (*, *, …) or np.array([ *, *, … ])
“data =”は省略可能です。
>>> pd.Series( [1, 2, 3] )		#リストで指定
>>> pd.Series( (1, 2, 3) )		#タプルで指定
>>> pd.Series( np.array([1, 2, 3]) )	#Numpy配列で指定

#結果はどれも同じ
0    1
1    2
2    3
dtype: int64

indexを定義していないので、0から始まる連番が設定されています。 indexの定義は(2)を参照ください。
リスト、タプル、numpy配列、Dictionary、Seriesは、変数に入れてからDataFrameを作ることもできます (むしろこちらの方が一般的)。
ls = [*, *, …] (リストの場合)とおいて、
pd.Series( ls ) または pd.Series( data = ls )
>>> ls = [1, 2, 3]		#例えばリストの場合
>>> pd.Series( ls )
0    1
1    2
2    3
dtype: int64

項はじめに戻る

b)Dictionary

keyをindexラベルとして、dataと同時に設定されます。
pd.Series( { 'x' : *, 'y' : *, … } ) または pd.Series( data = { 'x' : *, 'y' : *, … } )
>>> pd.Series( {'a':1, 'b':2, 'c':3} )
a    1
b    2
c    3
dtype: int64

変数を使って指定する場合は次のようにします。
dic = { 'x' : *, 'y' : *, … }とおいて、
pd.Series( dic ) または pd.Series( data = dic )
>>> dic = {'a':1, 'b':2, 'c':3}
>>> pd.Series( data = dic )
a    1
b    2
c    3
dtype: int64

項はじめに戻る

節はじめに戻る

(2)indexの定義

a)リスト、タプル、一次元Numpy配列

pandasをpdで表すとして(import pandas as pd)、
pd.Series( ls, index = [*, *, …] )
pd.Series( ls, index = (*, *, …) )
pd.Series( ls, index = np.array([ *, *, … ]) )
>>> ID = ['a', 'b', 'c']		#リストで指定
>>> ID = ('a', 'b', 'c')		#タプルで指定
>>> ID = np.array(['a', 'b', 'c'])	#Numpy配列で指定

#結果はどれも同じ
>>> pd.Series( [1, 2, 3], index = ID )
a    1
b    2
c    3
dtype: int64

なお、indexラベルは同じ値でも、空白でも構いません。
>>> pd.Series( [1,2,3], index = ['a', 'a', ''])	#1, 2行目は同じ、3行目は空白
a    1
a    2
     3
dtype: int64

項はじめに戻る

b)dataをDictionaryで定義した場合

Dictionaryでdataを定義する場合、keyはindexラベルとして扱われます((1)b)参照)。
>>> dic = {'a': 1, 'b': 2, 'c': 3}
>>> pd.Series(dic)
a    1
b    2
c    3
dtype: int64

dataにDictionaryを定義した上で、indexにDictionaryのKeyと異なる値のリストを定義した場合、次のようになります。
>>> dic = {'a':1, 'b':2, 'c':3}
>>> pd.Series( dic, index = ['x', 'b', 'c'] )	#'a'と'x'が異なる
x    NaN
b    2.0
c    3.0
dtype: float64

dataにDictionaryをした上で、indexに異なる順序のリストを定義した場合、indexで定義した順番に並べ替えられます。
>>> dic = {'a':1, 'b':2, 'c':3}
>>> pd.Series(dic, index = ['c', 'b', 'a'])
c    3
b    2
a    1

項はじめに戻る

節はじめに戻る



~~~ 目次 ~~~

参考文献