今回もキノコード先生の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
コメント