pythonでエクセルに格納された各シートから辞書を作成したい
解決したいこと
pythonでエクセルに格納された各シートから辞書を作成したい
上図のような「各シートにkeyとvalueが入力されたエクセルファイル」から、
dict_time = {"昼":0, "夜":1}
dict_position = {"課長":0,"新人":1 ……以下略
このようにdict_{各シート名}={key:value} の辞書を作り、
別に用意されたこのようなDataFrameの値を数値に変換したい。
辞書さえあれば、Dataframeの値を変換することはできるのですが、辞書が上手く作れなくて困っています。
発生している問題・エラー
まず、「シート名を取得してdict_{シート名}という関数を作る」ということを試しましたが、上手く行きませんでした。
dict_"{}".format("time") = {A:1,B:2}
>>> SyntaxError: invalid syntax
文字列から変数を作る、という処置はこういう風にはできない、というところで止まりました。
次に、変数名が作れないなら{シート名:{key:value}}のような多層構造の辞書を作ることを考えました。
import pandas as pd
#sheet_name = Noneとして全シート名を取得
dictionary = pd.read_excel(workdir +"/dict_raw.xlsx",sheet_name=None)
for i in dictionary:
for n in range(len(dictionary[i])):
setting.update({i:{dictionary[i]["key"][n]:dictionary[i]["value"][n]}})
上記の作業でsettingという1個の辞書に、{シート名:{key:value}}をどんどん詰め込もうとしたのですが、
print(setting)
>>>{'time': {'夜': 1}, 'position': {'新人': 3}, ・・・以下略}
このやり方だと辞書のkeyがsheet名として重複してしまうため、最後の1行しか保存してくれません。
重複しないように{{シート名:key}:value}という形にしようと思うと、
TypeError: unhashable type: 'dict'
のエラーで実装不可能です。
また、この辞書を使って逆変換も行いたい(※)のですが、{シート名:key}を組にするとそれが難しい気がします。
※ファイルを読み込んだ時に昼を0に変換するが、処理が終わってファイルを書き出すときには0を昼に戻したい、という意味
なにかいい方法があれば、どうぞよろしくお願いいたします。
補記
今の所、完全に力技ですが、下記のようにシート名を直打ちでなんとかしている状態です。
import pandas as pd
#sheet_name = Noneとして全シート名を取得
dictionary = pd.read_excel(workdir +"/dict_raw.xlsx",sheet_name=None)
dict_time = pd.read_excel(workdir +"/dict_raw.xlsx",sheet_name="time",index_col=0)
dict_time= dict(zip(dict_time.index,dict_time["value"]))
print(dict_time)
>>>{'昼': 0, '夜': 1}
#これをシート名の数だけ作る