【python】Jupyter-notebook + pandas + multiprocessing(Pool)を動かす方法【pandas】 メモ
5891 ワード
目的
- 大量のcsvデータを分析するために、データをたくさん読み込む必要があった
- ループを回すと遅すぎてイライラしました。
問題
- Jupyter-notebookでmultiprocessing(Pool)を利用したpandasのread_csvの並列化ができない。
-
このへんとかこのへんにも、同様のことが書いてあった。
- Windows機のみで起こる問題らしい?
結論
- 回避策は、関数を
func.py
として保存し、Jupyter-notebookでimportする。
NG例
OK例
-
.ipynb
と同じフォルダにfunc.py
として丸ごとコピーする
-
__init__.py
ファイルを置く
- 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で作ります。
- Jupyter-notebookでmultiprocessing(Pool)を利用したpandasのread_csvの並列化ができない。
- このへんとかこのへんにも、同様のことが書いてあった。
- Windows機のみで起こる問題らしい?
結論
- 回避策は、関数を
func.py
として保存し、Jupyter-notebookでimportする。
NG例
OK例
-
.ipynb
と同じフォルダにfunc.py
として丸ごとコピーする
-
__init__.py
ファイルを置く
- 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で作ります。
func.py
として保存し、Jupyter-notebookでimportする。
OK例
-
.ipynb
と同じフォルダにfunc.py
として丸ごとコピーする
-
__init__.py
ファイルを置く
- 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で作ります。
.ipynb
と同じフォルダにfunc.py
として丸ごとコピーする__init__.py
ファイルを置く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
import func
func.read_report_to_dataframe()
- jupyter-notebookやめて、pycharmで作ります。
Author And Source
この問題について(【python】Jupyter-notebook + pandas + multiprocessing(Pool)を動かす方法【pandas】 メモ), 我々は、より多くの情報をここで見つけました https://qiita.com/snuow/items/06cbadb6dc758d1b696e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .