7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【python】Jupyter-notebook + pandas + multiprocessing(Pool)を動かす方法【pandas】 メモ

Last updated at Posted at 2020-05-19

目的

  • 大量のcsvデータを分析するために、データをたくさん読み込む必要があった
  • ループを回すと遅すぎてイライラしました。

問題

  • Jupyter-notebookでmultiprocessing(Pool)を利用したpandasのread_csvの並列化ができない。
  • このへんとかこのへんにも、同様のことが書いてあった。
  • Windows機のみで起こる問題らしい?

結論

  • 回避策は、関数をfunc.pyとして保存し、Jupyter-notebookでimportする。

NG例

  • 最終セルが終わらない。(そもそも始まってない?)
    image.png

OK例

  1. .ipynbと同じフォルダにfunc.pyとして丸ごとコピーする
  2. __init__.pyファイルを置く
  3. Jupyter-notebook上で、funcをimportして実行する
func.py
import pandas as pd
import os,glob
from datetime import datetime as dt
from multiprocessing import Pool

FOLDER_PATH = r'folder_path\\'
FILE_TYPE = r'*.csv'
FILE_FORMAT = 'Report_%Y%m%d.csv'

def read_report_to_dataframe():
    # ファイルパスをリスト化
    csv_pathlist = glob.glob(FOLDER_PATH + FILE_TYPE)
    with Pool(os.cpu_count()) as p:
        df = pd.concat(p.map(read_report, csv_pathlist))
        
    return df 

    
# report読み込み
def read_report(csv_path):
    separator_list = [';',',']

    for sep in separator_list:
        df = pd.read_csv(filepath_or_buffer=csv_path,
                         engine='python',
                         parse_dates=[0],
                         index_col=[0],
                         skiprows=[1],
                         nrows=96,
                         sep=sep)
        # データフレームが空か確認
        if not df.empty:
            break

    return df 

  • jupyter-notebookの方で読みだして実行する。
jupyter-notebook
import func
func.read_report_to_dataframe()

まとめ

  • jupyter-notebookやめて、pycharmで作ります。
7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?