【Pandas】データフレームを辞書から作成(If using all scalar values, you must pass an indexのエラーの対処)[Python]

  • URLをコピーしました!
目次

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を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次