JavaScriptを有効にしてください

辞書内包表記でPandasのSeries, DataFrameを作成

 ·   3 min read

はじめに

辞書内包表記を使って、PandasのSeries, DataFrameを少ないコード量で作成する。

辞書内包表記は、Pythonの標準機能であり、辞書(dict)型の変数を簡潔に作成できる。また、Pandasの配列データ型であるSeries, DataFrameは辞書から作成できる。
そのため、辞書内包表記を使って、Series, DataFrameを少ないコード量で作成する方法を示す。

以降では、Pandasを以下のようにインストールしていることを前提とする。

1
import pandas as pd

また、環境は以下の通り。

バージョン
Python 3.7.3
Pandas 0.24.2

辞書内包表記

辞書内包表記の例を示す。0から9までの数字をキー、各キーを2倍にしたものを値とした辞書を得る。

1
2
doubles_dict = {x: x*2 for x in range(10)}
print(doubles_dict)

実行結果

1
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18}

上記の例のように、リスト内包表記の[...]{...}として、コロン:を使ってキーと値を指定すると、辞書内包表記となる。

また、辞書内包表記ではifif~elseを使うことも可能である。詳細は以下の記事を参照。

Pythonの辞書内包表記

辞書を使ったSerie, DataFrameの作成

PandasのSeriesの場合、辞書を引数として渡すと、キーをindexとするSeriesオブジェクトが生成される。

1
2
3
dict1 = {"a": 1, "b": 2, "c":3}
sr1 = pd.Series(dict1)
print(sr1)

実行結果

1
2
3
4
a    1
b    2
c    3
dtype: int64

一方、PandasのDataFrameの場合、値をリストである辞書を引数として渡すと、キーをcolumnsとするDataFrameオブジェクトが生成される。indexは0, 1, …と整数が割り振られる。

1
2
3
dict2 = {"a": [1, 2], "b": [3, 4], "c":[5, 6]}
df1 = pd.DataFrame(dict2)
print(df1)

実行結果

1
2
3
   a  b  c
0  1  3  5
1  2  4  6

ここで、辞書をDataFrameの引数として直接渡す場合、リストの長さは同じでなければならない。リストの長さが異なる場合にDataFrameを作成したい場合は、以下の記事を参照。
辞書をpd.DataFrameに変換 - Qiita

辞書内包表記を使ったSerie, DataFrameの作成

よって、辞書内包表記を使うと、Serie, DataFrameの作成を簡潔に記述できる。
まず、Seriesの例として、偶数を並べた配列を作成する。

1
2
sr2 = pd.Series({x: x*2 for x in range(5)})
print(sr2)

実行結果

1
2
3
4
5
6
0    0
1    2
2    4
3    6
4    8
dtype: int64

次に、DataFrameの例として、1行目に2の倍数、2行目に3の倍数を並べた配列を作成する。

1
2
df2 = pd.DataFrame({x: [x*2, x*3] for x in range(5)})
print(df2)

実行結果

1
2
3
   0  1  2  3   4
0  0  2  4  6   8
1  0  3  6  9  12

参考

Pythonの辞書内包表記
辞書をpd.DataFrameに変換 - Qiita

シェアする

Helve
WRITTEN BY
Helve
関西在住、電機メーカ勤務のエンジニア。Twitterで新着記事を配信中です