目的
6428行3列のデータ2000個をpandas.read_csv()で読み取り、3行6428列の行列2000個の行列にしたいです。
以下のような行列にしたいと思っています。(数字は適当です。)
[[[1,2,...,10]
[2,3,...,11]
[3,4,...,12]],
...,
[[4,5,...,13]
[5,6,...,14]
[6,7,...,15]]]
python
1file=glob.glob("/dir/*.txt") #dirの中に2000個のテキストファイル 2 3X_train=[] 4for datafile in file: 5 data=pd.read_csv(datafile,sep=',',header=None,dtype='float32') 6 data=data.values.T 7 data=data.tolist() 8 X_train.append(data) 9 10X_train=np.array(X_train) 11print(X_train.shape)
理想→(2000,3,6428)
実際→~~(1739,3)~~(2000,3)
と出力されます。
ご教授お願いします。
20行3列のカンマ区切りのテキストファイルを5つ作って同じフォルダに入れて試したら、
(5, 3, 20)
となりました
テキストファイルの拡張子は「.txt」で、ファイル内はヘッダーは無しです(20行だけ)
質問者さんの意図通りの動作ですよね
2000とか6428とかの巨大な数だと、データがどうなってるかちょっと表示させてみる的なことがやりにくいので、私のケースくらいコンパクトなデータセットを作って、1行ずつ結果を確認していったらいかがでしょうか??
あとは、壊れたファイルが紛れ込んで無いか確認するといいかもしれません
forループ内の「data=data.values.T」の次に「data.shape」を確認する行を追加して、もし「(3,6428)」ではなかったら、そのときのファイル名と共にエラー表示するようにしてみるとか
実は以前同じプログラムで行なったときは正常に動いたのです。
データの形状は全て(3,6428)だったのですが、ファイルに問題があると考えるべきかもしれないです...
あと、X_trainを出力させると、以下のようになります。
[[list([0.8297395706176758, 0.829745888710022, 0.8297521471977234, 0.8297584056854248, 0.8297677040100098, 0.8297739624977112, 0.8297802209854126,
print(X_train)
[[[0.82973957 0.82974589 0.82975215 0.82975841 0.8297677 0.82973957
0.82974589 0.82975215 0.82975841 0.8297677 0.82973957 0.82974589
0.82975215 0.82975841 0.8297677 0.82973957 0.82974589 0.82975215
0.82975841 0.8297677 ]
[0.97910649 0.98085409 0.98256069 0.98057109 0.98141956 0.97910649
0.98085409 0.98256069 0.98057109 0.98141956 0.97910649 0.98085409
0.98256069 0.98057109 0.98141956 0.97910649 0.98085409 0.98256069
0.98057109 0.98141956]
[0.9997893 0.99978942 0.99978954 0.99978966 0.99978977 0.9997893
0.99978942 0.99978954 0.99978966 0.99978977 0.9997893 0.99978942
0.99978954 0.99978966 0.99978977 0.9997893 0.99978942 0.99978954
0.99978966 0.99978977]]
ここまでが、20行3列のテキストファイル一つ分です
「list」はありませんね
どのようにしたらlistが消えてくれるのかが分かりません...
いやだから、ちっさいファイルを数個だけ作って、それだけを置いたフォルダで実行してみる
それでも「list」付きますか?
付かなければ、コードは正しいのだから、十中八九データファイルの問題です
上記がOKなのが前提ですが、二番目のコメントに書いたように、「data=data.values.T」を実行した直後の状態で「data.shape」が「(3,6428)」ではないファイルを見つけて、それを排除すると直るんじゃないか、と思うのですが
いえ、小さいファイルで行うと出なかったです。
それなら、やはり壊れたファイルが混在しているのを疑った方がいいと思いますよ
1つだけデータ点数が違うファイルを見つけることができました!
本当にありがとうございます!
それを除外したら、直りました?
はい!正常に動きました。
長い時間お付き合いいただきありがとうございました。
回答1件
あなたの回答
tips
プレビュー