便利なSeriesメソッド
describe()、value_counts()、unique()、map()を使って、Seriesをすばやく要約・変換します。
「便利なSeriesメソッド」はCoddyKit上の無料Pandas & NumPy Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPandas & NumPy Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Pandas & NumPy Academyコースには全4レッスンが含まれています。
describe()による簡単な要約
s.describe()は、count、平均、標準偏差、最小値、25パーセンタイル(Q1)、中央値(Q2)、75パーセンタイル(Q3)、最大値という統計要約を1回の呼び出しで生成します。文字列のSeriesでは、代わりにcount、unique、top、frequencyを返します。データセットを初めて調べる際に、列の分布の概要を最も速く把握できる方法です。
import pandas as pd
ages = pd.Series([25, 32, 19, 45, 28, 31, 22, 40])
print(ages.describe())
# count 8.000000
# mean 30.250000
# std 8.406...
# min 19.000000
# 25% 24.250000
# 50% 29.500000
# 75% 34.750000
# max 45.000000度数表のためのvalue_counts()
s.value_counts()は、一意な値をインデックスとし、それぞれの出現回数をデータとする新しいSeriesを返します。結果は出現回数の降順に並びます。normalize=Trueを渡すと、実際の件数ではなく割合を取得できます。カテゴリ列の分布を把握するには、まずこのメソッドを実行するのが一般的です。
import pandas as pd
colors = pd.Series(['red', 'blue', 'red', 'green', 'blue', 'red'])
print(colors.value_counts())
# red 3
# blue 2
# green 1
print(colors.value_counts(normalize=True).round(2))
# red 0.50 blue 0.33 green 0.17unique()とnunique()
s.unique()は、重複しない値を最初に出現した順序で格納したNumPy配列を返します(頻度順に並べるvalue_countsとは異なります)。s.nunique()は、重複しない値の個数を整数で返します。これは列のカーディナリティです。どちらもデフォルトではNaNを除外します。NaNを個別の値として数えるには、nunique(dropna=False)を使用してください。
import pandas as pd
s = pd.Series(['apple', 'banana', 'apple', 'cherry', 'banana'])
print(s.unique()) # ['apple' 'banana' 'cherry']
print(s.nunique()) # 3要素ごとの変換に使うmap()
s.map()は、関数、辞書、または別のSeriesを各要素に適用します。辞書を渡すと、各値が対応する辞書の値に置き換えられ、辞書にない値はNaNになります。関数を渡した場合は、要素ごとに適用されます。mapは、カテゴリラベルの再コード化やルックアップテーブルの適用に適しています。
import pandas as pd
grades = pd.Series(['A', 'B', 'C', 'A', 'B'])
gpa = {'A': 4.0, 'B': 3.0, 'C': 2.0}
print(grades.map(gpa))
# 0 4.0
# 1 3.0
# 2 2.0
# 3 4.0
# 4 3.0カスタム関数に使うapply()
s.apply(func)は、Pythonの呼び出し可能オブジェクトを各要素に適用し、その結果をまとめます。map()とは異なり、スカラー以外のオブジェクトを返す可能性がある、より複雑な関数に適しています。単純な要素ごとの変換にはmap()またはベクトル化式を優先し、ロジックが直接ベクトル化するには複雑すぎる場合にapply()を使用してください。
import pandas as pd
sentences = pd.Series(['Hello world', 'Pandas is great', 'Data science'])
word_counts = sentences.apply(lambda x: len(x.split()))
print(word_counts)
# 0 2
# 1 3
# 2 2sort_values()とsort_index()
s.sort_values()は、データ値でSeriesを昇順に並べ替えて返します(降順にするにはascending=Falseを渡します)。s.sort_index()はインデックスラベルで並べ替えます。どちらもデフォルトでは元のSeriesを変更しません。その場で変更するにはinplace=Trueを渡しますが、処理を連結する現代的なPandasコードではあまり推奨されません。
import pandas as pd
s = pd.Series([30, 10, 50, 20], index=['d', 'a', 'c', 'b'])
print(s.sort_values())
# a 10
# b 20
# d 30
# c 50
print(s.sort_index())
# a 10
# b 20
# c 50
# d 30メンバーシップテストに使う isin()
s.isin(values)は、要素が指定したリストまたは集合に含まれる位置でTrueになるboolean Seriesを返します。複数の|条件を記述するよりも読みやすく、大きな集合に対しては大幅に高速です。特定のグループに属する行をフィルタリングしたり、検索リストに一致するレコードを識別したりする場合によく使われます。
import pandas as pd
countries = pd.Series(['DE', 'US', 'FR', 'UK', 'US', 'DE'])
nordics = ['DE', 'FR']
print(countries.isin(nordics))
# 0 True 1 False 2 True 3 False 4 False 5 True
print(countries[countries.isin(nordics)])範囲のフィルタリングに使う between()
s.between(left, right, inclusive='both')は、値が範囲[left, right]内にある位置でTrueになるboolean Seriesを返します。デフォルトでは両端点を含みます。(s >= left) & (s <= right)と書くより簡潔で、意図も明確に伝わります。年齢層や価格帯など、数値範囲のフィルタリングに便利です。
import pandas as pd
scores = pd.Series([45, 72, 83, 91, 55, 68])
pass_mask = scores.between(60, 100)
print(pass_mask)
# 0 False 1 True 2 True 3 True 4 False 5 True
print(scores[pass_mask].values) # [72 83 91 68]すばやい確認に使う head() と tail()
s.head(n)は最初のn個の要素(デフォルトは5個)を返し、s.tail(n)は最後のn個を返します。長いSeriesを扱う際、何千行も出力せずに先頭と末尾を確認するために頻繁に使います。これらは新しいSeries(スライス)を返すため、元のSeriesは変更されません。
import pandas as pd
s = pd.Series(range(100))
print(s.head(3))
# 0 0
# 1 1
# 2 2
print(s.tail(3))
# 97 97
# 98 98
# 99 99名前の変更に使う rename()
s.rename('new_name')は、name属性が異なる新しいSeriesを返します。インデックスラベルの名前を変更するには、dictまたは関数を渡します:s.rename(index={'old': 'new'})。SeriesをDataFrameに結合する前の名前変更は重要です。Seriesのnameが列見出しになるためです。生の値を再代入するのではなく、必ずrename()を使ってください。
import pandas as pd
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'], name='original')
renamed = s.rename('updated').rename(index={'a': 'x', 'b': 'y', 'c': 'z'})
print(renamed)
# x 1
# y 2
# z 3
# Name: updatedidxmin() と idxmax()
s.idxmin()は最小値のインデックスラベルを返し、s.idxmax()は最大値のラベルを返します。インデックスが日付や商品名など意味のあるラベルを持つ場合、argmin/argmaxより便利です。単なる位置番号ではなく、実際の識別子を取得できるためです。
import pandas as pd
scores = pd.Series({'Alice': 88, 'Bob': 73, 'Carol': 95, 'Dan': 60})
print('Best:', scores.idxmax(), scores.max()) # Carol 95
print('Worst:', scores.idxmin(), scores.min()) # Dan 60理解度チェック
このレッスンで学んだ、便利なSeriesメソッドについて理解度を確認しましょう。
レッスンのまとめ
このレッスンでは、describe()を使うと1回の呼び出しで統計的な要約を取得できること、value_counts()を使うと一意な値の度数表を作成できること、そしてmap()はdictを使って値を変換し、apply()は各要素にカスタム関数を実行することを学びました。次はDataFrameを扱います。DataFrameは、Pandasでデータ分析を行う際の二次元データの中心的な構造です。
AI チューターと学ぶ Python — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「便利なSeriesメソッド」レッスンは無料ですか?
はい。「便利なSeriesメソッド」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Pandas & NumPy Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Pandas & NumPy Academyコースには全4レッスンが含まれています。
「便利なSeriesメソッド」で何を学びますか?
describe()、value_counts()、unique()、map()を使って、Seriesをすばやく要約・変換します。 ブラウザで直接実行するハンズオンコードでPandas & NumPy Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Pandas & NumPy Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPandas & NumPy Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「便利なSeriesメソッド」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPandas & NumPy Academyレッスンでコードを書いて実行できますか?
はい。すべてのPandas & NumPy Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Seriesの作成
- ラベルベースと位置ベースのアクセス
- Seriesのベクトル化演算
- 便利なSeriesメソッド