Python 無料で独習 シリーズ (Series) とはPandas入門05

Python 無料で独習 シリーズ (Series) とはPandas入門05

今回もキノコード先生のPandas 超入門コースから
Seriesについて勉強します。

Series とは

Seriesとは、DataFrameから1列取り出した時にできる型で
リストにindexがついたようなイメージらしいです。

DataFrameから1列抽出するとSeries、
逆にSeriesをまとめるとDataFrameになるらしいです。
図でいうとこんな感じらしいです。

リストを使ってSeriesを作成

まずリストを作成します。

data = [90, 78, 65, 87, 72]

そのリストをSeriesの要素に入れてシリーズを作成します。

s1 = pd.Series(data)
import pandas as pd
data = [90, 78, 65, 87, 72]
s1 = pd.Series(data)
s1
0    90
1    78
2    65
3    87
4    72
dtype: int64

ちゃんとindexがついたSeriesが完成しました。

Numpyを使ってSeriesを作成

まずNumpyをimportします。
それからarange関数をつかいデータを作成します。
np.arange(1, 10, 2)
この場合ですと、1から10までで2づつ増やした数列ができます。
それをSeriesにします。

import numpy as np
import pandas as pd
data = np.arange(1,10,2)
s2 = pd.Series(data)
s2

0    1
1    3
2    5
3    7
4    9
dtype: int64

辞書型を使ってSeriesを作成

DataFrameと同様にSeriesも任意のindexに変更が可能みたいです。
なので辞書型でindexとデータを定義して
そこからSeriesを作成します。

dict01 = {'sato':90, 'suzuki':78, 'takahashi':65, 'tanaka':87, 'ito':72}
s3 = pd.Series(dict01)
s3

sato         90
suzuki       78
takahashi    65
tanaka       87
ito          72
dtype: int64

indexにかんしては
s3.index=[1,2,3,4,5]とすると変更が可能です。

s3.index=[1,2,3,4,5]
s3
1    90
2    78
3    65
4    87
5    72
dtype: int64

DataFrameにSeries追加

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
columns=['col01', 'col02', 'col03'],
index=['idx01', 'idx02', 'idx03'])
df
	col01	col02	col03
idx01	1	2	3
idx02	4	5	6
idx03	7	8	9

s3 = pd.Series({'idx01':10, 'idx02':11, 'idx03':12})
s3
idx01    10
idx02    11
idx03    12
dtype: int64

df['col04']=s3
df
	col01	col02	col03	col04
idx01	1	2	3	10
idx02	4	5	6	11
idx03	7	8	9	12

s6 = pd.Series({'idx03':13, 'idx04':14, 'idx05':15})

df['col05'] = s6
df
col01	col02	col03	col04	col05
idx01	1	2	3	10	NaN
idx02	4	5	6	11	NaN
idx03	7	8	9	12	13.0

合致するindexがある場合はそのままclumを指定して代入する事ができます。

時系列データ

dates = pd.date_range('2000/01/01', periods=5,freq='D')
dates
DatetimeIndex(['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04',
               '2000-01-05'],
              dtype='datetime64[ns]', freq='D')

s1=pd.Series(dates)
s1
0   2000-01-01
1   2000-01-02
2   2000-01-03
3   2000-01-04
4   2000-01-05
dtype: datetime64[ns]

時系列データもSeriesとして扱うことができます。

indexとデータ部分に名前を付ける

DataFrameのようにindexとデータ部分に名前をつけることもできます。

s1 = {'sato':90, 'suzuki':78, 'takahashi':65, 'tanaka':87, 'ito':72}
s1 = pd.Series(dict01)
s1.index.name ='member'
s1.name = 'score'
s1

member
sato         90
suzuki       78
takahashi    65
tanaka       87
ito          72
Name: score, dtype: int64

Seriesの四則演算

Seriesの四則演算も可能で、
s1 – 2
s1 * 2
s1 / 2
とするとデータ全てに演算が処理されます。

data = np.arange(1,10,2)
s2 = pd.Series(data)
s2
0    1
1    3
2    5
3    7
4    9
dtype: int64

s2 + 2
0     3
1     5
2     7
3     9
4    11
dtype: int64

欠損値確認(hasnans)

Seriesに欠損値(NaN)が含まれているか確認できます。
欠損値:値が存在しない要素。Not A Numberの略。
NaNと表示されます。

hasnansを使うと、NaNがあるときTrue、
NaNがないときFalseが返ってくるそうです。
NaNを含むデータを用意して実行してみます。

s4 = pd.Series([90, 78, 65, None, 72])
s4
0    90.0
1    78.0
2    65.0
3     NaN
4    72.0
dtype: float64

s4.hasnans
True

欠損値確認(isnull)

hasnansですと、欠損値の有無しかわかりません。
isnullつかうと欠損値の場所を特定することができます。

pd.isnull(s4)
0    False
1    False
2    False
3     True
4    False
dtype: bool

プログラミン独習カテゴリの最新記事