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

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

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

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

Q&A

解決済

2回答

1401閲覧

python 大容量のテキストファイルからDATAFRAMEにデータを取り込みたい(時間はかかっても良いのでメモリを最小限に)

icemanstanding

総合スコア73

Python

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

0グッド

0クリップ

投稿2020/07/28 23:44

任意のフォルダ内にある同一カラムのtxtファイルを全てdataframeに読み込みたいのですが、
データ容量が大きいせいか、最後のconcat文でメモリーエラーが発生してしまいます。

個人的には、listに読み込んだデータをconcatする際にデータ量が
2倍になってしまっているように考えています。

処理時間が伸びても良いので、例えば、各ファイルの1行ずつを読み込んで、
dataframeに加えていくなど、メモリに優しい処理をアドバイスしてもらえないでしょうか?

セキュリティの都合で.py ファイルは使えません。

txt_files = glob.glob('./origin/*.txt') list = [] for f in txt_files: list.append(pd.read_table(f)) df0 = pd.concat(list)

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

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

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

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

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

guest

回答2

0

ベストアンサー

以下のように逐次concatすれば、途中は1つ分のテーブルのメモリしか使いません。

Python

1df0 = None 2for f in txt_files: 3 df = pd.read_table(f) 4 if df0 is None: 5 df0 = df 6 else: 7 df0 = pd.concat([df0,df])

投稿2020/07/29 00:47

can110

総合スコア38341

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

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

0

個別にdataframe量産してリストにつっこんで、それとは別に大きいのを作るから重いのでしょうか。
(以下、試してはおりませんが…)
たとえば、下記リンクのようにはなからdataframeに入れ込んでいくとか。

pd.DataFrame({f: pd.read_table(f, index_col=0).squeeze() for f in glob('/path/to/files/*.dat')})

python-pandasで複数ファイルのデータを一度にDataFrameに読み込む

あるいは、別にファイル(json, csv等)作ってそこに追記していくとか。

あとは、この辺がもしかしたら関係あるかもしれません。

DataFrame構築時にカラムの型(dtype)を指定していないと、整数はint64 、小数はfloat64 が勝手に割り当てられます。どんな値も扱えるように、とにかく大きなサイズの型になっています。

Pandas.DataFrameのメモリサイズを削減する(最大で8分の1) [Python]

投稿2020/07/29 00:41

jeanbiego

総合スコア3966

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問