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

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

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

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

Q&A

0回答

386閲覧

PythonでCSVファイルの読み込みを速くしたい

onosan

総合スコア59

Python 3.x

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

0グッド

1クリップ

投稿2019/12/07 05:26

編集2022/01/12 10:55

前提・実現したいこと

Pythonのコードに関する質問です。Pandasのread_csvで400万レコード近くのcsvファイルを読み込もうとしているのですが、
種々のキャラクタが入り込んでしまうこと、またshift_jisであることから、Codecsを使っています。

###csvのサイズ
csvは約2GBです。

### 該当のソースコード import pandas as pd import codecs file1="xxxxxx" with codecs.open(file1, "r", "cp932", "ignore") as file: mylist = [] for chunk in pd.read_csv(file,sep=",",chunksize=10000,engine="python"): mylist.append(chunk) df = pd.concat(mylist)

補足情報(FW/ツールのバージョンなど)

読み込むだけで40分から60分かかってしまい、もっと短時間に読み込む方法がないか
をググるなどで調べているのですが、解決法が見つかりません。
Windows10
第5世代 core i5
メモリ 8GB

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

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

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

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

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

meg_

2019/12/07 06:30

・コードは「コードの挿入」で記入しましょう。 ・csvファイルのサイズは何GBですか?
onosan

2019/12/07 07:34

修正依頼に対して、記述しました。
meg_

2019/12/07 09:16

read_csv()の際に適切なデータ型を指定することで使用メモリを削減できるので、試してみてください。 pandasはメモリ使用量が多いと言われていますので、ご使用の環境では厳しいかもしれません。 読み込めても操作途中でメモリエラーが発生する可能性が高いと思います。
onosan

2019/12/07 13:52

カラムの数は多いのですが、実は、カラム名に対して、objectなど、結構な数の型は定義して処理をしています。メモリの問題だとしたら、16GB、あるいは32GBのメモリにすることで処理が格段に速くなるでしょうか。 会社のPCなので、なかなかよりハイスペックのマシンを購入することが難しいとは思うのですが。。
meg_

2019/12/07 14:05

メモリ30GBのサーバーで3GB程度のcsvファイルをpandasで処理した場合で、15GB程のメモリ使用でした。(環境によって変わりますので参考です)ファイルを開くのにかかる時間は数分です。 スクリプト実行中のメモリを監視してみると良いかと。 chunksizeの指定をしているのはメモリサイズの問題でしょうか? 可能であればcsv自体を何らかの規則で分割した方が良い気がします。
onosan

2019/12/07 14:24

ありがとうございます。実は、csvファイルの作成は、sasのプログラマーが作成しており、3か月分のあるデータを構築してもらっています。chunksizeは念のためにプログラムがハングしないための予備的な措置です。しかし、今AIとかビッグデータと言っていて、そのメインのプログラムがPythonだと思うのですが、400万レコード程度で1時間もかかってしまうのが信じられません。daskというライブラリーを使うと早くなるというのも試してみたのですが、あまりオプションが豊富でないようで、やり方がわかりません。こちら質問としてあげていただくことはできないでしょうか。
onosan

2019/12/08 05:13

すみません。修正依頼になっているのですが、質問としてまだアップされていない状態なのでしょうか?初心者なのでお手数かけます。
meg_

2019/12/08 12:21

どのような処理をしたいのか分かりませんが、メモリが足りない場合にはchucksize毎に処理をしてアウトプットを出す、という方法があります。 メモリ不足が原因の場合、メモリ増強が難しいのであれば、クラウドサービスの利用を検討されてはいかかでしょうか? ※ズバリの回答が難しいためこの欄に書いております。
onosan

2019/12/09 04:50

すみません。会社のPCで会社のデータを利用しているために、すぐにメモリの増設とかクラウドとかという話になると、なかなか許可がおりません。 どういう処理が必要かというと、会社のKPIを入力のcsvファイルから算出し、csvに落とし、BIツールで可視化するということが最終目標なのですが、一番時間がかかっているプロセスがこの読み込みの部分なのです。 chucksize毎に処理をしてアウトプットを出すについては、、コードの中で実装しているつもりで、chunksizeを10000に設定して、それぞれのリストをデータフレームにconcatしています。 daskで高速化は難しいでしょうか。 何卒、よろしくお願い申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問