【python】Jupyter-notebook + pandas + multiprocessing(Pool)를 이동하는 방법 【pandas】 메모

목적


  • 많은 양의 CSV 데이터를 분석하기 위해 많은 데이터를로드해야했습니다.
  • 루프를 돌리면 너무 느려서 좌절했습니다.

  • 문제


  • Jupyter-notebook에서 multiprocessing(Pool)을 이용한 pandas의 read_csv의 병렬화를 할 수 없다.

  • 이건 라든지 이건 에도 같은 것이 쓰여 있었다.
  • Windows 기기에서만 발생하는 문제다?

  • 결론


  • 해결 방법은 함수를 func.py로 저장하고 Jupyter-notebook에서 가져옵니다.

  • NG 예


  • 최종 셀이 끝나지 않는다. (처음 시작하지 않았습니까?)


  • OK 예


  • .ipynb 와 같은 폴더에 func.py 로 통째로 복사
  • __init__.py 파일 넣기
  • Jupyter-notebook에서 func를 가져 와서 실행합니다

  • 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으로 만듭니다.
  • 좋은 웹페이지 즐겨찾기