実現したいこと
いつもお世話になっております。
次のコードをfor文を使用してきれいにまとめたいです。なお、rankはDataFrameです。
rank_21_30 = pd.concat([rank1,rank2,rank3,rank4,rank5,rank6,rank7,rank8,rank9,rank10,rank11,\ rank12,rank13,rank14,rank15,rank16,rank17,rank18,rank19,rank20,rank21,rank22])
試したこと
次のコードで実行してみましたがエラーが出てしまいます。
pd.concat(["rank{}".format(str(i).zfill(2)) for i in range(1,23,1)]) TypeError: cannot concatenate object of type '<class 'str'>'; only Series and DataFrame objs are valid
こちらのページ→https://teratail.com/questions/233357 に同じようなエラーが出ており、このページではDataFrameにしてくださいとあります。しかし、今回私がconcatしたいrankはすでにDataFrameであるため対応に困っています。
本来は rank1 〜 rank22 を作成する段階でリスト化する(ranks[0] 〜 ranks[21])方が望ましいのですが、locals() からデータフレームを拾ってくる方法があります。
ranks = locals()
rank_21_30 = pd.concat([ranks[f'rank{i+1}'] for i in range(22)])
上の質問と同内容ですが、そもそも rank1,rank2 などはどのように作っていますか?
関数を定義して作成しています。以下、コードです。
race_id_list = ['2021300414{}'.format(str(i).zfill(2)) for i in range(1, 13, 1)]
race_date = race_id_list[0][:4] + '/' + race_id_list[0][6:8] + '/' + race_id_list[0][8:10]
rank1 = add_rank(predict_time(str(race_date), race_id_list), str(race_date))
add_rankとpredicit_timeが関数になります。今現在はrace_id_listを個別に入れてrankに番号を付けていますが、ゆくゆくはrankもfor文などで回したいと考えています。

回答1件
あなたの回答
tips
プレビュー