実現したいこと
for文で各ループごとに、ループ内で作成したlistをデータフレームに変換したいと思っています。
その際に、リストからデータフレームに変換する際に、そのデータフレームの名前を連番となるように名前をつけたいのですができません。どのように修正すればよいのでしょうか?
最終的には
lst_nox_1 = pd.DataFrame(lst5)
lst_nox_2 = pd.DataFrame(lst5)
lst_nox_3 = pd.DataFrame(lst5)
.
.
.
lst_nox_11 = pd.DataFrame(lst5)
lst_nox_12 = pd.DataFrame(lst5)
のようなデータフレームをつくりたいです。
発生している問題・エラーメッセージ
lst_nox_(f'{i}') = pd.DataFrame(lst5) ^ SyntaxError: cannot assign to function call
該当のソースコード
python
1for i in range(12): 2 lst5=[] 3 lst_nox_(f'{i}') = pd.DataFrame(lst5)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
python
1import sys 2import pandas as pd 3 4this_module = sys.modules[__name__] 5 6for i in range(1, 13): 7 lst5 = [] 8 setattr(this_module, f'lst_nox_{i}', pd.DataFrame(lst5)) 9 10print(lst_nox_1) 11print(lst_nox_12) 12print([nox for nox in dir(this_module) if nox.startswith('lst_nox')]) 13 14# 15Empty DataFrame 16Columns: [] 17Index: [] 18Empty DataFrame 19Columns: [] 20Index: [] 21['lst_nox_1', 'lst_nox_10', 'lst_nox_11', 'lst_nox_12', 'lst_nox_2', 'lst_nox_3', 'lst_nox_4', 'lst_nox_5', 'lst_nox_6', 'lst_nox_7', 'lst_nox_8', 'lst_nox_9']
投稿2022/08/28 13:03
総合スコア21265
0
ベストアンサー
変数名で分ける必要性がなければ、各データフレームへのアクセスの利便性、メンテナンス性からTakaiYさんの回答にあるようにリストに格納したほうがよいと思います。
Python
1import pandas as pd 2 3dataframes = {} 4 5for i in range(12): 6 lst5 = [] 7 exec("lst_nox_{}= pd.DataFrame(lst5)".format(i + 1)) 8 9print("lst_nox_1", lst_nox_1) 10print("lst_nox_2", lst_nox_2) 11print("lst_nox_3", lst_nox_3) 12print("lst_nox_4", lst_nox_4) 13print("lst_nox_5", lst_nox_5) 14print("lst_nox_11", lst_nox_11) 15print("lst_nox_12", lst_nox_12) 16
出力
lst_nox_1 Empty DataFrame
Columns: []
Index: []
lst_nox_2 Empty DataFrame
Columns: []
Index: []
lst_nox_3 Empty DataFrame
Columns: []
Index: []
lst_nox_4 Empty DataFrame
Columns: []
Index: []
lst_nox_5 Empty DataFrame
Columns: []
Index: []
lst_nox_11 Empty DataFrame
Columns: []
Index: []
lst_nox_12 Empty DataFrame
Columns: []
Index: []
参考:【Python】変数名を動的に変更して変数を作成する方法 – exec()
追記1
最終的にやりたかったことはこういうことでしょうか?
lst5は不明のため適当に設定。
空のDataFrame lst_noxをまず作成
for文で lst5から作成したDataFrameを都度lst_noxに連結 を繰り返す)
実現したいことが明確になれば、より的確な回答が得られるかと思います。
Python
1import pandas as pd 2 3lst_nox = pd.DataFrame() 4for i in range(12): 5 lst5 = [i + 1, i + 2, i + 3] 6 lst_nox = pd.concat([ 7 lst_nox, 8 pd.DataFrame( 9 lst5, columns=['lst_nox_' + str(i + 1)], index=['R0', 'R1', 'R2']) 10 ], 11 axis=1) 12print(lst_nox)
lst_nox_1 lst_nox_2 lst_nox_3 lst_nox_4 lst_nox_5 lst_nox_6 lst_nox_7 lst_nox_8 lst_nox_9 lst_nox_10 lst_nox_11 lst_nox_12 R0 1 2 3 4 5 6 7 8 9 10 11 12 R1 2 3 4 5 6 7 8 9 10 11 12 13 R2 3 4 5 6 7 8 9 10 11 12 13 14
追記2
(コメントより引用)
どうも最後に横方向に結合をどうやれば分からず
であれば、追記1の応用で以下のような形で結合ができるかと思います。
(TakaiYさんの回答前提の処理で申し訳ありません)
Python
1lst_nox = pd.DataFrame() 2for i in range(12): 3 lst_nox = pd.concat([lst_nox, lst_nox[i]], axis=1)
投稿2022/08/28 11:10
編集2022/08/28 17:45総合スコア509
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/29 11:06

0
そのデータフレームの名前を連番となるように名前をつけたいのですができません。
通常そのようなことはしません。
名前(文字列)でDataFrameを区別したいのであれば、辞書を利用した方法はどうでしょうか?
Python
1import pandas as pd 2 3dataframes = {} 4 5for i in range(12): 6 lst5=[] 7 dataframes['lst_nox_' + str(i+1)] = pd.DataFrame(lst5) 8 9print(dataframes) 10#{'lst_nox_1': Empty DataFrame 11 #Columns: [] 12 #Index: [], 13 #'lst_nox_2': Empty DataFrame 14 #Columns: [] 15 #Index: [], 16 #'lst_nox_3': Empty DataFrame 17 #Columns: [] 18 #Index: [], 19 #'lst_nox_4': Empty DataFrame 20 #Columns: [] 21 #Index: [], 22 #'lst_nox_5': Empty DataFrame 23 #Columns: [] 24 #Index: [], 25 #'lst_nox_6': Empty DataFrame 26 #Columns: [] 27 #Index: [], 28 #'lst_nox_7': Empty DataFrame 29 #Columns: [] 30 #Index: [], 31 #'lst_nox_8': Empty DataFrame 32 #Columns: [] 33 #Index: [], 34 #'lst_nox_9': Empty DataFrame 35 #Columns: [] 36 #Index: [], 37 #'lst_nox_10': Empty DataFrame 38 #Columns: [] 39 #Index: [], 40 #'lst_nox_11': Empty DataFrame 41 #Columns: [] 42 #Index: [], 43 #'lst_nox_12': Empty DataFrame 44 #Columns: [] 45 #Index: []}
投稿2022/08/28 10:21
総合スコア10980
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。