sort_values関数の基本的な使い方
Pandasのsort_values
関数は、データフレームやシリーズの値に基づいてソートを行うための関数です。以下に基本的な使い方を示します。
import pandas as pd
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [5, 4, 3, 2, 1],
'C': ['a', 'b', 'c', 'd', 'e']
})
# 'A'列で昇順ソート
df_sorted = df.sort_values(by='A')
print(df_sorted)
このコードを実行すると、’A’列の値に基づいてデータフレームが昇順にソートされます。by
パラメータにはソートしたい列名を指定します。複数列でソートしたい場合は、列名のリストを指定します。
また、sort_values
関数は新しいデータフレームを返すため、元のデータフレームは変更されません。元のデータフレームを直接ソートしたい場合は、inplace=True
を指定します。この場合、sort_values
関数は何も返さず、元のデータフレームが直接更新されます。この点には注意が必要です。
昇順と降順のソート
Pandasのsort_values
関数では、データを昇順(小さい値から大きい値)または降順(大きい値から小さい値)にソートすることができます。デフォルトでは昇順にソートされますが、ascending
パラメータを使用してソートの順序を指定することができます。
以下に、昇順と降順のソートの例を示します。
import pandas as pd
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [5, 4, 3, 2, 1],
'C': ['a', 'b', 'c', 'd', 'e']
})
# 'A'列で昇順ソート
df_sorted_asc = df.sort_values(by='A', ascending=True)
print(df_sorted_asc)
# 'A'列で降順ソート
df_sorted_desc = df.sort_values(by='A', ascending=False)
print(df_sorted_desc)
このコードを実行すると、まず’A’列の値に基づいてデータフレームが昇順にソートされ、次に降順にソートされます。ascending=True
は昇順(デフォルト)、ascending=False
は降順を意味します。
NaN値の扱い
Pandasのsort_values
関数では、NaN(Not a Number)値の扱いも重要な要素となります。デフォルトでは、sort_values
関数はNaN値をソートの最後に配置します。これは、NaN値が「最大の値」として扱われるためです。
しかし、na_position
パラメータを使用することで、NaN値の位置を制御することができます。このパラメータは'last'
(デフォルト)または'first'
のいずれかの値を取ります。
以下に、NaN値の扱いの例を示します。
import pandas as pd
import numpy as np
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, np.nan, 4, 5],
'B': [5, 4, np.nan, 2, 1],
'C': ['a', 'b', 'c', 'd', 'e']
})
# 'A'列で昇順ソート(NaNは最後)
df_sorted_na_last = df.sort_values(by='A', na_position='last')
print(df_sorted_na_last)
# 'A'列で昇順ソート(NaNは最初)
df_sorted_na_first = df.sort_values(by='A', na_position='first')
print(df_sorted_na_first)
このコードを実行すると、まずNaN値が最後に配置されたソート結果が出力され、次にNaN値が最初に配置されたソート結果が出力されます。
複数列のソート
Pandasのsort_values
関数では、複数の列を基準にソートすることも可能です。これは、一つの列だけではなく、複数の列を基準にデータを整理したい場合に非常に便利です。
以下に、複数列のソートの例を示します。
import pandas as pd
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, 2, 4, 5],
'B': [5, 4, 3, 2, 1],
'C': ['a', 'b', 'c', 'd', 'e']
})
# 'A'列と'B'列で昇順ソート
df_sorted_multi = df.sort_values(by=['A', 'B'])
print(df_sorted_multi)
このコードを実行すると、まず’A’列の値に基づいてデータフレームがソートされ、次に’B’列の値に基づいてソートされます。つまり、’A’列の値が同じ場合には、’B’列の値でソートされます。
このように、sort_values
関数のby
パラメータに列名のリストを指定することで、複数列のソートを行うことができます。
inplaceパラメータによるデータの更新
Pandasのsort_values
関数では、inplace
パラメータを使用することで、ソート結果を元のデータフレームに直接反映させることができます。デフォルトでは、inplace
はFalse
に設定されており、ソート結果は新しいデータフレームとして返されます。元のデータフレームは変更されません。
しかし、inplace=True
を指定すると、ソート結果は元のデータフレームに直接反映され、sort_values
関数は何も返しません。これは、大きなデータフレームを扱う際にメモリを節約するために有用です。
以下に、inplace
パラメータの使用例を示します。
import pandas as pd
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, 3, 4, 5],
'B': [5, 4, 3, 2, 1],
'C': ['a', 'b', 'c', 'd', 'e']
})
# 'A'列で昇順ソート(結果を元のデータフレームに反映)
df.sort_values(by='A', inplace=True)
print(df)
このコードを実行すると、’A’列の値に基づいてデータフレームがソートされ、その結果が元のデータフレームdf
に直接反映されます。