__getitem__のidが0しか取れないです。
data_li =[] label_li = [] class Dataset(): def __init__(self, csv_file_path, root_dir, small=False): self.df = pd.read_csv(root_dir + csv_file_path) def __len__(self): return len(self.df) def __getitem__(self, id): #idが0しか取れない seq = self.df["Rank"][id] label = self.df.values[id][1] data_li.append(seq.tolist()) label_li.append(label) return data_li, label_li
とコードを書いたのですが、__getitem__のidが0しか取れません。
self.dfのdfは10000ぐらいあるので、10000まで取れるように作りたいのですが、それができません。どう修正すればいいでしょうか?
csvは
Rank Index 0 20 1 1 10 1 2 30 1 3 15 1 4 20 0 5 35 0 6 20 0 7 40 0 8 10 0 9 20 0 10 15 0 ・ ・ ・
のようになっています。
0しか取れない、とはどのような状況でしょうか。また、csvはどんなデータですか?
def __getitem__(self, id): で取得するidが0のみということです。
csvの情報を追加しました。
そのまま検証できるように、csvは生のテキストデータの先頭10行くらいを直接貼ってください(データ内容はダミーにしても構いません)
まだ状況がよくわからないので、実際の動作例(indexingした際の入出力など)をいくつか示していただけると回答しやすいと思います。
情報を追加しました。
seq = self.df["Rank"][id] でcsvの先頭の20しか取れません。
もしご存知ならよろしくお願いします
その取っているコードを実際に記載してください
取っているコードはDatasetクラスですが・・・。違いますか?
Datasetクラスをインスタンス化してindexingでアクセスして、というコードがあると思いますが・・・その部分でたとえば<Datasetのインスタンス>[0]とするとどうなって<Datasetのインスタンス>[1]とするとどうなるのか、どういう部分で期待と違う動作になっているのか・・・(0でも1でも2でも100でも何を入れても先頭のが返ってきちゃうとかかもしれないし、あるいは1以上では例外を吐いて落ちるのかもしれない)・・・ということすら現状では私には伝わっていません。なので、全体像と問題点がはっきりわかるように書いてもらえないと回答できません、というコメントをしています。
<Datasetのインスタンス>[数字]と手打ちで指定すると、存在するインデックスの数字ならそのデータが取得できます。問題は、__getitem__のidがなぜか0しか取れないことです。
手打ちで指定と書いたところは、seq = self.df["Rank"][100] のように書いて試しました。
回答欄に私から聞きたいことを書いたので、御覧ください
回答1件
あなたの回答
tips
プレビュー