はじめに #
辞書内包表記を使って、PandasのSeries, DataFrameを少ないコード量で作成する。
辞書内包表記は、Pythonの標準機能であり、辞書(dict)型の変数を簡潔に作成できる。また、Pandasの配列データ型であるSeries, DataFrameは辞書から作成できる。 そのため、辞書内包表記を使って、Series, DataFrameを少ないコード量で作成する方法を示す。
以降では、Pandasを以下のようにインストールしていることを前提とする。
import pandas as pd
また、環境は以下の通り。
バージョン | |
---|---|
Python | 3.7.3 |
Pandas | 0.24.2 |
辞書内包表記 #
辞書内包表記の例を示す。0から9までの数字をキー、各キーを2倍にしたものを値とした辞書を得る。
doubles_dict = {x: x*2 for x in range(10)}
print(doubles_dict)
実行結果
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18}
上記の例のように、リスト内包表記の[...]
を{...}
として、コロン:
を使ってキーと値を指定すると、辞書内包表記となる。
また、辞書内包表記ではif
やif~else
を使うことも可能である。詳細は以下の記事を参照。
辞書を使ったSerie, DataFrameの作成 #
PandasのSeriesの場合、辞書を引数として渡すと、キーをindexとするSeriesオブジェクトが生成される。
例
dict1 = {"a": 1, "b": 2, "c":3}
sr1 = pd.Series(dict1)
print(sr1)
実行結果
a 1
b 2
c 3
dtype: int64
一方、PandasのDataFrameの場合、値をリストである辞書を引数として渡すと、キーをcolumnsとするDataFrameオブジェクトが生成される。indexは0, 1, …と整数が割り振られる。
例
dict2 = {"a": [1, 2], "b": [3, 4], "c":[5, 6]}
df1 = pd.DataFrame(dict2)
print(df1)
実行結果
a b c
0 1 3 5
1 2 4 6
ここで、辞書をDataFrameの引数として直接渡す場合、リストの長さは同じでなければならない。リストの長さが異なる場合にDataFrameを作成したい場合は、以下の記事を参照。 辞書をpd.DataFrameに変換 - Qiita
辞書内包表記を使ったSerie, DataFrameの作成 #
よって、辞書内包表記を使うと、Serie, DataFrameの作成を簡潔に記述できる。 まず、Seriesの例として、偶数を並べた配列を作成する。
sr2 = pd.Series({x: x*2 for x in range(5)})
print(sr2)
実行結果
0 0
1 2
2 4
3 6
4 8
dtype: int64
次に、DataFrameの例として、1行目に2の倍数、2行目に3の倍数を並べた配列を作成する。
df2 = pd.DataFrame({x: [x*2, x*3] for x in range(5)})
print(df2)
実行結果
0 1 2 3 4
0 0 2 4 6 8
1 0 3 6 9 12