Seriesの長さを調べる
Seriesは.size
、.shape
、len()
で要素数をチェックできる
import pandas as pd
s = pd.Series([1,2,3,4,5])
print(s.size, type(s.size)) # 5 <class 'int'>
print(s.shape, type(s.shape)) # (5,) <class 'tuple'>
print(len(s), type(len(s))) # 5 <class 'int'>
ユニークな要素数を数える
- series.is_unique:配列の要素がユニークかどうかを判定
- series.nunique():ユニークな値の個数を返す
u1 = pd.Series([1,2,3,4,5])
print(u1.is_unique, type(u1.is_unique)) # True <class 'bool'>
print(u1.nunique(), type(u1.nunique())) # 5 <class 'int'>
u2 = pd.Series([1,1,2,3,3])
print(u2.is_unique, type(u2.is_unique)) # False <class 'bool'>
print(u2.nunique(), type(u2.nunique())) # 3 <class 'int'>
有効な要素数を数える
- series.count():Series内で有効(=Noneや空欄じゃない)な要素数を返す
- series.hasnans:Series内に無効(=Noneや空欄)な要素があったらTrueを返す
s = pd.Series([None,1,2,3,4,5,None])
print(s.size, type(s.size)) # 7 <class 'int'>
print(s.count(), type(s.count())) # 5 <class 'numpy.int64'>
print(s.hasnans, type(s.hasnans)) # True <class 'bool'>
- series.notnull():有効な要素のBoolリストを返すので、それをsum()すれば有効な要素数の合計になる
- series.notna():同上
s = pd.Series([None,1,2,3,4,5,None])
print(s.notnull().values) # [False True True True True True False]
print(s.notna().values) # [False True True True True True False]
print(s.notnull().sum()) # 5
print(s.notna().sum()) # 5
無効な要素数を数える
- series.isnull():無効な要素のboolリストを返すので、それをsum()すれば無効な要素数の合計になる
s = pd.Series([None,1,2,3,4,5,None])
print(s.isnull().values) # [ True False False False False False True]
print(s.isnull().sum(), type(s.isnull().sum())) # 2 <class 'numpy.int64'>
各要素の出現回数を数える(ExcelのCOUNTIFに相当)
Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)
出現回数のカウント。デフォルトでは無効な値は自動的に除外する
s = pd.Series([3, 1, 2, 3, 4, None])
print(s.value_counts())
# 3.0 2
# 1.0 1
# 2.0 1
# 4.0 1
# Name: count, dtype: int64
dropna=Falseにすると無効な値もカウントする
s = pd.Series([3, 1, 2, 3, 4, None])
print(s.value_counts(dropna=False))
# 3.0 2
# 1.0 1
# 2.0 1
# 4.0 1
# NaN 1
# Name: count, dtype: int64
normalize=Trueにすると、全体を1とした割合を計算する
s = pd.Series([3, 1, 2, 3, 4, None])
print(s.value_counts(dropna=False, normalize=True))
# 3.0 0.333333
# 1.0 0.166667
# 2.0 0.166667
# 4.0 0.166667
# NaN 0.166667
# Name: proportion, dtype: float64
要素の並び替え
値のソート
Series.sort_values(*, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
パラメータ(よく使うものだけ太字)
- axis:Seriesでは使わない。DataFrameオブジェクトで使うもの
- ascending:Trueなら昇順、Falseなら降順
- inplace;Trueにすると変更を保存する。Falseならコピーを返す
- kind:ソートアルゴリズムを指定できる
- na_position:firstかlastのみ。NA(無効な値)を先頭に置くか末尾に置くかの指定
- ignore_index:Trueにするとソート後にindexをリセットする(indexが0, 1, ..., n-1 になる)
- key:Pythonの標準関数sorted()と同じようにkey関数を渡すことができる
s = pd.Series([None, 1, 3, 10, 5])
print(s.sort_values())
# 1 1.0
# 2 3.0
# 4 5.0
# 3 10.0
# 0 NaN
# dtype: float64
ascending=Falseで降順
print(s.sort_values(ascending=False))
# 3 10.0
# 4 5.0
# 2 3.0
# 1 1.0
# 0 NaN
# dtype: float64
na_position='first'でNaNを先頭に、ignore_index=TrueでIndexをリセット
print(s.sort_values(ascending=False, na_position='first', ignore_index=True))
# 0 NaN
# 1 10.0
# 2 5.0
# 3 3.0
# 4 1.0
# dtype: float64
indexのソートもある:pandas.Series.sort_index
TOPランキングの取得
Series.nlargest(n=5, keep='first')
n:TOP何件の要素を取得するか指定
keep:重複する要素がある時どうするかの指示
first
: 重複する要素の中で最初に出現する要素を返すlast
: 重複する要素の中で最後に出現する要素を返すall
: 重複するすべての要素を含める。指定したnより多くなる可能性あり
countries_population = {"Italy": 59000000, "France": 65000000,
"Malta": 434000, "Maldives": 434000,
"Brunei": 434000, "Iceland": 337000,
"Nauru": 11300, "Tuvalu": 11300,
"Anguilla": 11300, "Montserrat": 5200}
s = pd.Series(countries_population)
print(s.nlargest(3))
# France 65000000
# Italy 59000000
# Malta 434000
# dtype: int64
keep=allを使った場合
print(s.nlargest(3, keep='all'))
# France 65000000
# Italy 59000000
# Malta 434000
# Maldives 434000
# Brunei 434000
# dtype: int64
逆に最下位ランキングを作る「nsmallest」もある
print(s.nsmallest(3, keep='all'))
# Montserrat 5200
# Nauru 11300
# Tuvalu 11300
# Anguilla 11300
# dtype: int64