pd.Seriesに辞書を渡すとキーで昇順にソートされる
例
Series
を作る際にindex
を指定した場合、指定したindex
はリストなので順番を持っています。
なので、リストの順番でSeries
が作られます。
hoge = pd.Series([1, 2, 3, 4, 5], index=['C','A','B','E','D']) print(hoge) # 実行結果 C 1 A 2 B 3 E 4 D 5 dtype: int64
これに対し、辞書を渡した場合はどうなるでしょう。
huga = pd.Series({'C': 1, 'A': 2, 'B': 3, 'E': 4, 'D': 5}) print(huga) # 実行結果 A 2 B 3 C 1 D 5 E 4 dtype: int64
辞書は順番を持たないので、出力はてきと〜になるかと思いきや、渡した辞書のキーで昇順になっています。
うーむ、なんか直感に反するぞ。。。
調査
ということで調査です。
しかし、ドキュメントを読んでみてもそれらしき記述は見つからず。
ググっても検索ワードが思いつかずそれらしき情報も見当たらず。
なので、pyCharm
でライブラリをデバッグしてみることに。
すると、Series
クラスのコンストラクタにこんなコードが!
elif isinstance(data, dict): if index is None: if isinstance(data, OrderedDict): index = Index(data) else: index = Index(_try_sort(data))
ここで、data
というのはSeries
に渡された変数です。
要するに、pd.Series(data)
とした時に辞書が渡されているかつindex
の指定がない場合は_try_sort
とやらを実行するとのこと。
OrderedDict
は順番が保持されているのでそれをそのまま使うみたいですね。
で、_try_sort
を見ると、、、
def _try_sort(iterable): listed = list(iterable) try: return sorted(listed) except Exception: return listed
ソートしてる〜
これやんけ〜
ということで、pd.Seriesに辞書を渡すとキーで昇順にソートされる、というお話でした。