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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

4125閲覧

大量のCSVファイルを行方向に結合させたい

h5x

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/10/05 11:54

編集2020/10/05 12:30

CSVの2列目以降を行方向に抜き出し、他のファイルの同じ行(2列目以降)で結合させたいのですがどのようにすればいいでしょうか?CSVで1000ファイル、1ファイル5003行あります。質問文の行と列の言葉の使い方を間違えていたらすみません。combined.csvに出力例を書いています。

csvファイルの中身

1.csv
A,s,3,4,5
B,s,2,4,4
C,s,5,5,2
以下5000行続く

2.csv
a,t,5,5,2
b,t,8,4,4
c,t,5,5,2
以下5000行続く

1000.csv
a,Z,5,5,2
b,Z,8,4,4
c,Z,5,5,2
以下5000行続く

combined.csv
s,3,4,5,t,5,5,2・・・省略・・・Z,5,5,2
s,2,4,4,t,8,4,4・・・省略・・・Z,8,4,4
s,5,5,2,t,5,5,2・・・省略・・・Z,5,5,2
以下5000行続く

やったこと
1行ごとに読みとってファイルを閉じると膨大な数ファイルの開け閉めをする必要があり効率的ではない気がしています。
PCのメモリは結構積んであるので、一度すべて配列に読み込もうと、以下をしたのですが初っ端らからつまづきました。

Python3

1import pandas as pd 2 3mr = [] 4for num in range(1,1001): 5 print (num) 6 mr[num] = pd.read_csv( str(num) + ".csv" , header = None) 7

以下エラーが表示されました。
line 6, in <module>
mr[num] = pd.read_csv( str(num) + ".csv" , header = None)
IndexError: list assignment index out of range

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

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

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

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

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

meg_

2020/10/05 11:59

> PCのメモリは結構積んであるので、一度すべて配列に読み込もうと、以下をしたのですが初っ端らからつまづきました。 何につまづいたのですか? エラーが出たのか、結果が意図したものにならなかったのか、何がどうなったのか?を書いてください。
h5x

2020/10/05 12:29

コメントありがとうございます。 また、説明不足すみません。 line 6, in <module> mr[num] = pd.read_csv( str(num) + ".csv" , header = None) IndexError: list assignment index out of range このようなエラーが出て作った配列にデータを保存する段階から失敗した感じになります。
meg_

2020/10/05 12:33

mr.append(pd.read_csv( str(num) + ".csv" , header = None))でどうでしょうか?
h5x

2020/10/05 14:40

このようにすれば配列に入れることができるのですね!無事動作いたしました。ありがとうございます!!
guest

回答2

0

ベストアンサー

1.csvの先頭列も(A,B,Cではなく)a,b,cだという前提で書いたコード。

Python

1import pandas as pd 2 3dfm = pd.DataFrame() 4 5for num in range(1, 1001): 6 df = pd.read_csv(f"{num}.csv", header=None, index_col=[0]) 7 dfm = pd.concat([dfm, df], axis=1) 8 9print(dfm) 10dfm.to_csv('combined.csv', header=None, index=None)

投稿2020/10/05 13:02

編集2020/10/05 21:57
Daregada

総合スコア11990

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

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

h5x

2020/10/05 14:38

{n}.csv は{num}.csvのタイポだと思いますがしっかりど動作致しました。 pandasにはこんな方法もあったのですね。 ありがとうございました!!
Daregada

2020/10/05 21:56

あ、numのTYPOです 。手元でnで書いていたので。
guest

0

普通にそのファイル数分ファイルオープンし、それぞれ1行づつ読み込んで書き出し、それを行数分繰り返せばいい

投稿2020/10/05 12:21

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問