Pandas
前回、random.choicesで重みありランダム選択する方法を解説しました。
今回はPandasでデータフレームを辞書から作成する方法を紹介していきます。
私は大体の場合、列に対応するデータのリストを作って、列名を指定してデータを追加する方法か、行に対応するデータを使ってconcatを使ってデータを追加する方法を使っています。
そしてたまたま何かのライブラリを使った際、その出力が辞書形式でデータフレームに変換するのに結構苦労したので、備忘録的に書いておこうというのが今回の発端です。
それでは始めていきましょう。
失敗例
最初に私がやった失敗例を紹介します。
ある辞書を作成し、それをそのままPandasのデータフレームのデータとして使おうとした例です。
import pandas as pd
dict1 = {'A':1, 'B':2, 'C':3}
df1 = pd.DataFrame(dict1)
print(df1)
実行結果
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Input In [3], in <cell line: 5>()
1 import pandas as pd
3 dict1 = {'A':1, 'B':2, 'C':3}
----> 5 df1 = pd.DataFrame(dict1)
7 print(df1)
中略
ValueError: If using all scalar values, you must pass an index
いくつかのサイトではこのように「pd.DataFrame(辞書)」でもそのままデータフレームとなると書かれていたのですが、どうしてもこの「If using all scalar values, you must pass an index」のエラーが出てしまい、どうにもなりませんでした。
データフレームを辞書から作成する方法
「If using all scalar values, you must pass an index」のエラーが出た場合、インデックスを指定してあげると、つまり「pd.DataFrame」のオプションに「index」を指定してあげると、エラーなく辞書からデータフレームを作成できました。
import pandas as pd
dict1 = {'A':1, 'B':2, 'C':3}
df1 = pd.DataFrame(dict1, index=['val'])
print(df1)
実行結果
A B C
val 1 2 3
作成されたデータは辞書のキーが列名になり、値が行になります。
そのため複数の行のデータをもつデータフレームを作成したい場合は、辞書の値をリストとします。
import pandas as pd
dict2 = {'A':[1,1], 'B':[2,4], 'C':[3,9]}
df2 = pd.DataFrame(dict2, index=['val1', 'val2'])
print(df2)
実行結果
A B C
val1 1 2 3
val2 1 2 3
ただこの場合、「index」で指定する列名もリストとして、行のデータの分だけ必要になることに注意してください。
そして辞書のキーを行名として使いたい場合は、最後に「.transpose()」で列と行を入れ替えます。
import pandas as pd
dict2 = {'A':[1,1], 'B':[2,4], 'C':[3,9]}
df2 = pd.DataFrame(dict2, index=['val1', 'val2'])
print(df2.transpose())
実行結果
val1 val2
A 1 1
B 2 2
C 3 3
色々見ていると「pd.DataFrame.from_dict()」という関数も存在しているようですが、正直使い方がよく変わらなかったので、私としては今回の方法を採用しました。
次回はplotlyで表示範囲をスライドで指定できるrangesliderを紹介します。
ではでは今回はこんな感じで。
コメント