質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

518閲覧

行列にしたいのにリストのまま変わりません。

tirotaro

総合スコア4

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/01/17 09:17

編集2021/01/17 14:17

目的
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)
と出力されます。

ご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/01/17 10:54

20行3列のカンマ区切りのテキストファイルを5つ作って同じフォルダに入れて試したら、 (5, 3, 20) となりました テキストファイルの拡張子は「.txt」で、ファイル内はヘッダーは無しです(20行だけ) 質問者さんの意図通りの動作ですよね 2000とか6428とかの巨大な数だと、データがどうなってるかちょっと表示させてみる的なことがやりにくいので、私のケースくらいコンパクトなデータセットを作って、1行ずつ結果を確認していったらいかがでしょうか??
jbpb0

2021/01/17 11:04

あとは、壊れたファイルが紛れ込んで無いか確認するといいかもしれません forループ内の「data=data.values.T」の次に「data.shape」を確認する行を追加して、もし「(3,6428)」ではなかったら、そのときのファイル名と共にエラー表示するようにしてみるとか
tirotaro

2021/01/17 13:20 編集

実は以前同じプログラムで行なったときは正常に動いたのです。 データの形状は全て(3,6428)だったのですが、ファイルに問題があると考えるべきかもしれないです... あと、X_trainを出力させると、以下のようになります。 [[list([0.8297395706176758, 0.829745888710022, 0.8297521471977234, 0.8297584056854248, 0.8297677040100098, 0.8297739624977112, 0.8297802209854126,
jbpb0

2021/01/17 14:39

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」はありませんね
tirotaro

2021/01/17 14:44

どのようにしたらlistが消えてくれるのかが分かりません...
jbpb0

2021/01/17 14:58 編集

いやだから、ちっさいファイルを数個だけ作って、それだけを置いたフォルダで実行してみる それでも「list」付きますか? 付かなければ、コードは正しいのだから、十中八九データファイルの問題です
jbpb0

2021/01/17 14:54

上記がOKなのが前提ですが、二番目のコメントに書いたように、「data=data.values.T」を実行した直後の状態で「data.shape」が「(3,6428)」ではないファイルを見つけて、それを排除すると直るんじゃないか、と思うのですが
tirotaro

2021/01/17 15:00

いえ、小さいファイルで行うと出なかったです。
jbpb0

2021/01/17 15:05

それなら、やはり壊れたファイルが混在しているのを疑った方がいいと思いますよ
tirotaro

2021/01/17 15:26

1つだけデータ点数が違うファイルを見つけることができました! 本当にありがとうございます!
jbpb0

2021/01/18 08:13

それを除外したら、直りました?
tirotaro

2021/01/21 13:55

はい!正常に動きました。 長い時間お付き合いいただきありがとうございました。
guest

回答1

0

ベストアンサー

~~pandasのデータフレームは二次元の表しか扱えません。

実際のファイルの中身を見ないとわかりませんが、pandasを使わずに読まなければ解決しないと思います。~~

ソースファイルをしっかり見ていませんでした。ディレクトリは合っているでしょうか。
以下のテストプログラムを流してみてください。

python

1file=glob.glob("/dir/*.txt") #dirの中に2000個のテキストファイル 2 3print('number of files are:',len(file)) 4print(file) 5

投稿2021/01/17 09:42

編集2021/01/17 11:52
ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tirotaro

2021/01/17 10:06

pandas.read_csv()でデータの読み込みはできるのですが、、、 ファイルの中身は、最初の5行が以下のような形です。 0.829739595225029,0.9791064636154444,0.9997893159608914 0.8297458738559496,0.9808540957707571,0.9997894245859633 0.8297521525862818,0.9825606725973074,0.9997895330174078 0.8297584312172023,0.9805710939663521,0.9997896416424797 0.8297676828481595,0.9814195725248162,0.9997898013852327
ppaul

2021/01/17 10:21

3要素の行が6428行続いているのですか。 それを一個の行列にしたいとして、その次の3×6428個の要素との区切りは何らかの方法で分かるようになっていますか?
tirotaro

2021/01/17 10:39 編集

3×6428個の要素のテキストファイルが2000個、同じディレクトリにある状態です。 一つずつファイルを読み込んで行列にし、X_trainに追加していくのを2000個するという感じです。
ppaul

2021/01/17 11:53

すみません。ソースプログラムを読み損ねていました。 ディレクトリが間違っているかもしれないので、回答にあるテストプログラムの結果を教えて下さい。
tirotaro

2021/01/17 14:19 編集

print('number of files are:',len(file)) >>>number of files are 1739 となりました。 テキストファイルが少なかったようです。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問