こんにちは。キノコードです。
この動画では、pandasのDataFrameやSeriesの並び替えについて学びます。
ExcelやSQLと同じように、小さい順からの並び替え、大きい順からの並び替え。他にも2つ以上の列の並び替えができます。
他にも、ExcelやSQLではできない行方向の並び替えなどもPythonではできます。
この動画で説明する内容はこちらです。
読み込む前の準備として概要欄に記載したキノコードのサイトにExcelファイルを用意しています。
それをダウンロードして、学習用のJupyter Labを保存しているフォルダにに保存してください。
チャンネル登録がお済みでない方は、動画の新着通知や、登録チャンネルからキノコードのページに飛べますので、ぜひチャンネル登録をお願いします。
Python学習サービス「キノクエスト」のご紹介
キノコードでは、Pythonを習得するためのPython学習サービス「キノクエスト」を運営しています。
キノクエストには、学習カリキュラムがあり、学習順番に悩むことなく学習を進められます。
月額1,990円と本1冊分の値段です。
キノクエストの特徴は下記の通りです。
- Python学習をしている仲間が集まるコミュニティがある
- 1000問以上の問題を解いてプログラミングを習得
- 環境構築不要ですぐに始められる
- 動画と連動しているので、インプットもできる。
- 月額1,990円で、コミュニティもセット
キノクエストを詳しく知りたい方は、紹介ページをご覧ください。
▼キノクエストの紹介ページはこちら▼
https://kino-code.com/kq_service_a/
レッスンで使ったファイルはこちら
キノクエストでアカウントの新規登録に進み、メール認証を完了します。
ログインした状態(プラン選択画面が表示されます)で下記のボタンをクリックしてください。
それでは解説をはじめます。
Pandasインポート
import pandas as pd
それでは、Pandasをインポートするところから始めていきましょう。
まず、Pandasをインポートする記述を書きます。
「import pandas as pd」を書きます。
「as」は、ライブラリ名(pandas)を好きな名前で使うことができます。
したがって、この記述により「pandas」を「pd」という名前で使うことができます。
エラーにならず、インポートが完了しました。
表示する列数・行数を変更
pd.set_option(‘display.max_columns’, None) # 最大表示列数
pd.set_option(‘display.max_rows’, 5) # 最大表示行数
次に、表示する列数・行数を変更します。
今回は表示させる列数は制限なし、行数は10行とします。
レッスン6で説明しましたが、表示する列や行数の変更は、「pd.set_option」を使いましたよね。
実行します。
データフレームの読み込み
df = pd.read_excel(‘sample.xlsx’,sheet_name=’実績管理表’)
df
続いてレッスンで使うデータを説明します。
今回はエクセルデータを使います。
このデータはあるアパレル会社の販売データになります。
社員ごとに何をいくら売上したのかがわかります。
エクセルを読み取るにはread_excelメソッドを使いました。
これはレッスン6で説明しました。
そこでは説明していなかったのですが、エクセルのシートを指定して読み取ることができます。
heet_nameという引数にシート名を渡せばよいです。
実行してみましょう。
読み取れました。
DataFrameの並び替え
df.sort_values(by=’売上金額(円)’)
それではデータフレームの並び替えをしてみましょう。
売上金額が少ない順に並び替えをします。
DataFrameの並び替えは、sort_valuesメソッドを使います。
sort_valuesと書いて丸括弧。丸括弧の中にbyを書きます。ここに並び替えをたいカラム名を渡します。
実行します。
人口の少ない順に並び替えができした。
ちなみに、小さいものから大きいものに並び替えをすることを昇順に並び替えといいます。
数字でいうと小さいものから大きいものですが、平仮名やカタカナだと「あ」から「わをん」の「ん」まで、アルファベットがaからzまでも昇順になります。
逆に、大きいものから小さいものに並び替えをすることを降順といいます。平仮名やカタカナだと「ん」から「あ」の順、zからaまでも降順になります。
DataFrameの並び替え(降順)
df.sort_values(by=’売上金額(円)’,ascending=False)
次に降順に並び替えをしてみましょう。
ascendingという引数にfalseを渡します。
実行してみましょう。
降順に並び替えができました。
DataFrameの並び替え(昇順)
df.sort_values(by=’売上金額(円)’,ascending=True)
ちなみに、先ほどascendingの引数に何も設定しなければデフォルトでTrueになっています。
実行してみましょう。
昇順になっています。
DataFrameで2つのカラムの並び替え
df.sort_values(by=[‘氏名’,’売上金額(円)’])
2つのカラムを並び替えたい場合はどのようにすればいいでしょうか?
その場合は、byの引数にリストで渡します。
氏名と売上金額で並び替えてみましょう。
実行してみます。
氏名で昇順で並び替えられ、氏名の中で売上が昇順に並び替えができています。
df.sort_values(by=[‘氏名’,’売上金額(円)’],ascending=[True,False])
氏名を昇順、売上金額は降順に並び替えてみましょう。
ascendingにTrueとFalseをリストで渡します。
実行しましょう。
氏名は昇順、売上金額は降順に並び替えができています。
DataFrameで3つのカラムの並び替え
df.sort_values(by=[‘性別’,’氏名’,’売上金額(円)’],ascending=[True,True,False])
3つのカラムの並び替えも可能です。
性別順に、氏名順に並び替えて、売上金額の降順で並び替えてみましょう。
できているようです。
欠損値の取り扱い
df.sort_values(by=[‘性別’,’氏名’,’売上金額(円)’],ascending=[True,True,False])
3つのカラムの並び替えも可能です。
性別順に、氏名順に並び替えて、売上金額の降順で並び替えてみましょう。
できているようです。
df = pd.read_excel(‘sample.xlsx’,sheet_name=’実績管理表_空白’)
df.sort_values(by=’氏名’,ascending=True)
セルに空白がある場合はどのようになるでしょうか?
「実績管理表_空白’」というワークシートを読み込んだ上で、氏名の昇順で並び替えてみましょう。
実行してみます。
空白のセルが一番下に来ていますね。
このように値が入っていない部分のことを欠損値といいます。
df = pd.read_excel(‘sample.xlsx’,sheet_name=’実績管理表_空白’)
df.sort_values(by=’氏名’,ascending=True)
では、降順に並び替えた場合、欠損値が一番最初にくるでしょうか?
実行します。
この場合でも、欠損値が一番最後にきています。
df.sort_values(by=’氏名’,ascending=False,na_position=’first’)
実行してみましょう。
欠損値が一番最初にきています。
df.sort_values(by=’氏名’,ascending=False,na_position=’last’)
行方向の並び替え
df_ax= pd.DataFrame({‘col01’:[1, 2, 3], ‘col02’:[4, 5, 6], ‘col03’:[7, 8, 9]}
,index=[‘idx01’, ‘idx02’, ‘idx03’])
df_ax
今までは列の中で並び替えをしてきました。
行の中で並び替えもすることも可能です。
ただし、数値と文字が混在している場合は、並び替えすることができません。
そこで、新しいDataFrameを作成しましょう。
df_axという変数に代入をします。
DataFrameの作り方を忘れた方は、レッスン4を再度ご確認くださいね。
df_ax.sort_values(by=’idx01′,ascending=False,axis=1)
idx01の行の中を降順で並び替えてみましょう。
行の中で並び替えをするにはaxisの引数に1を渡します。
実行してみましょう。
idx01の行が降順に並び替えができています。
ちなみに、axisのデフォルトは0です。
0を渡すと列が降順に並び替えができるはずです。
確認のためにやってみましょう。
列方向の並び替え
df_ax.sort_values(by=’col01′,ascending=False,axis=0)
列なので、並び替える対象のbyにcol01を渡して、axisに0を渡してみましょう。
実行します。
col01が降順に並び替えができています。
もとのデータフレームを変更
df_ax
もとのデータフレームを変更する方法をみていきましょう。
もう一度、df_axを表示させてみましょう。
このようなDataFrameでしたね。
df_ax.sort_values(by=’col01′,ascending=False)
col01で降順に並び替えてみます。
df_ax
もう一度、df_axを表示させてみましょう。
並び替えができていません。
つまり、もとのデータフレームのままですね。
もとのデータフレームを変更してみましょう。
df_ax.sort_values(by=’col01′,ascending=False,inplace=True)
inplaceにTrueを渡すと、もとのDataFrameが変更されます。
実行してみましょう。
降順に並び変わっていますね。
df_ax
もとのDataFrameを表示させてみましょう。
変わっていますね。
df_ax = df_ax.sort_values(by=’col01′,ascending=True)
ちなみに、inplaceを使わずにdf_axのデータフレームを並び替える方法として、単純に、もう一度同じ変数に入れる方法があります。
今はDataFrameが降順になっているので、昇順にして同じ変数に代入をしてみましょう。
実行してみましょう。
昇順に入れ替わっているはずです。
df_ax
表示をさせてみましょう。昇順に入れ替わっています。
inplaceを使わずにDataFrameを変更できました。
インデックスの並び替え
df_ax.sort_index(ascending=False)
今までは、データ部分の並び替えをしてきました。
データ部分を並び替えをしていたので、sort_valuesのvalues
インデックスで並び替えをすることもできます。
インデックス名で並び替えをするなら、sort_indexメソッドを使います。
valuesがインデックスに変わっただけですね。
sort_valuesでは、byでカラム名を指定していました。
sort_indexではインデックスを並び替えをするので、sort_valuesのようにbyで列名や行名を指定する必要がありません。
またsort_indexのデフォルトは、ascendingがTrueになっています。
したがって、何も引数を指定しなくてもインデックス名で昇順に並び替えることができます。
今回はFalseにしてみましょう。
実行してみます。
インデックス名を降順で並び替えすることができました。
sort_indexの引数
df_ax.sort_index(ascending=False,inplace=True,na_position=’first’)
sort_indexには、inplaceやna_positionなどの引数もあります。
このDataFrameには、欠損値はないですが、引数に入れて実行してみましょう、
inplaceを使っているのでもとのDataFrameが変わっているはずです。
df_ax
表示させてみましょう。
もともと昇順だったindexが降順に変わっています。
カラムの並び替え
df_ax.sort_index(axis=1,ascending=False)
インデックスの並び替えをやったので、カラムの並び替えもやってみます。
カラム名を降順に並び替えてみましょう。
カラム名の並び替えをするには、sort_indexの引数axisに1を渡してあげればよいです。
ascendingでFalseを渡して降順に並び替えましょう。
実行します。
カラム名を降順に並び替えることができました。
Seriesの並び替え(sort_values)
s = df_ax[‘col01’]
最後にSeriesの並び替えです。
レッスン5のSeriesで説明しましたが、DataFrameから列を取り出すとSeriesになります。
col01の列を抜き出してsという変数に代入をしましょう。
表示もさせてみましょう。
type(s)
typeでデータ型を確認します。
Seriesになっていますね。
s.sort_values(ascending=True)
Seriesにもsort_valuesやsort_indexメソッドを使うことができます。
やってみましょう。
sort_valuesで、昇順に並び替えをしてみます。
昇順なのでascendingでTrueですよね。
実行します。
並び替えができています。
もとのSeriesをもう一度確認します。
降順でしたよね。
s.sort_index(ascending=True)
sort_indexを使ってみます。
昇順にしてみましょう。
実行します。
昇順になっています。
PandasのDataFrameやSeriesの並び替えについて説明しました。
なんだかできる気がしません?うわー。
キノコードでは、pythonやPandasの他に、データ可視化のmatplotlibや人工知能のレッスンもアップしていく予定です。
気に入ってくださった方は、チャンネル登録をお願いします。
それでは、次回のレッスンでお会いしましょう。