Pythonで変数名を変えながら値を代入する、的な。の巻

Pythonで変数名を変えながら値を代入する、的な。の巻

はじめに

Pythonのpandasでデータを扱っているときに、
変数名をforで回しながら作って、そこに変数名に対応したファイルの値を代入していく、みたいなことをしたいときがあったんです。。。

例えば、

list1 = [‘a’, ‘b’, ‘c’]

のリストがあり、

a.csv
b.csv
c.csv

のように要素名に対応させて作ったファイルがあったとき、

a_desu = pd.read_csv(‘a.csv’)
b_desu = pd.read_csv(‘b.csv’)
c_desu = pd.read_csv(‘c.csv’)

となるように、読み込むファイル名に対応させた変数名を付けつつ、
それにファイルの値を代入していく、ということを。。。

あ、forを回してformat()で名前を代入していけばいいんじゃん。と考えて、

for i in list1:
    '{}_desu'.format(i) = pd.read_csv('{}.csv'.format(i))

としてみたものの、

format()で作成した文字列を変数に直接指定することはできないんですって。

実際にやってみるとこうなりました。

import pandas as pd

list1 = ['a', 'b', 'c']

for i in list1:
    '{}_desu'.format(i) = pd.read_csv('{}.csv'.format(i))
File "<ipython-input-49-6fe3995f7134>", line 6 '{}_desu'.format(i) = pd.read_csv('{}.csv'.format(i)) ^ SyntaxError: can't assign to function call

ダメなのね。。。

わかりましたじゃあ別の方法を考えます、で、辞書を使って対応しましたよ、ていう話。(というわけで記事のタイトルは「的な」としています。)

辞書を作ることで代替しました

各ファイル名に対応した変数名を持つ変数をそれぞれに作って、うりうり値を代入していくのはなんか難儀みたいなので。。。
辞書を作ることで代替することにしました。次の方法にて。

1.それぞれのファイルに対応した変数名をkeyにして、対応するファイルの値をvalueにした辞書を作ってから、

2.使うときには作った辞書から欲しいやつを取り出す。

やり方

1.それぞれのファイルに対応した変数名をkeyにして、対応するファイルの値をvalueにした辞書を作ってから、、、

import pandas as pd

#格納用の空の辞書を作っておく
abc_dic = {}

list1 = ['a', 'b', 'c']

#list1の要素名を冠した、それぞれのファイル名に対応した変数名をkeyにして、
#それに対応する読み込みたいファイルの値をvalueにした辞書を作る
for i in list1:
    abc_dic['{}_desu'.format(i)] = pd.read_csv('{}.csv'.format(i))
print(abc_dic)
{'a_desu': a01 a02 a03 a04 a05 0 a11 a12 a13 a14 a15, 'b_desu': b01 b02 b03 b04 b05 0 b11 b12 b13 b14 b15, 'c_desu': c01 c02 c03 c04 c05 0 c11 c12 c13 c14 c15}

辞書ができました。

2. 使うときには作った辞書から欲しいやつを取り出す。

display(abc_dic['a_desu'])
display(abc_dic['b_desu'])
display(abc_dic['c_desu'])
pandas_dataframe_data

これでやりたいことの代替ができました。

まあ他にいい方法があるかも知らんけど。とりあえずめでたしめでたし

Python; 3.7.2
Jupyter ; 1.0.0
macOS; Catalina version 10.15.5
で実施しました。



このブログはエックスサーバー で運営しております。




WordPressを使うならロリポップ!
簡単インストール完備で楽々スタート!

世界にたった一つ、あなただけのドメインを登録しよう!
格安ドメイン取得サービス─ムームードメイン─