Python

【Python】pandasのread_csvがkilledで止まるときの対処法

この記事は約2分で読めます。

 

vpnサーバーなどでpandasでcsvを読み込むときにcsvのサイズが大きすぎると「killed」と表示され、実行プロセスが勝手に終了してしまうことがあります。今日はその場合の対処法について自分が行っているアプローチをメモしておきます

 

原因

 

vpsでプロセスが勝手にkillされ、killedと表示されるときは基本的に処理に対してサーバーのメモリが不足している場合に発生します。特にpandasやseleniumはメモリをドカ食いするので1gbのサーバーでちょっと大きいサイズのCSVをread_csvとかで読み込もうとするとこういう事象が起きやすいかなと思います

 

解決法

 

①チャンクサイズで分割する

 

import pandas as pd

csv_file_path="C://user/~~"
chunk_size = 10000  # 1回に読み込む行数
chunks = pd.read_csv(csv_file_path, encoding="cp932", chunksize=chunk_size)
df2 = pd.concat([chunk for chunk in chunks])

 

pandasのメモリエラー系のエラーメッセージでググるとこの方法がよくヒットするが、個人的な体感ではぶっちゃけこれであまり解決した試しはない。ここまでして読み込まないといけない時点で後の処理でメモリが爆発するのでぶっちゃけ実行するPCのメモリやスペックを上げるか、read_csvを使わないアルゴリズムにするといった抜本的な方針転換が必要なケースが多いと思う

 

②特定の列だけ読み込むように指定する

 

read_csvは引数でcsvの特定の列だけを読み込むことができます。不要な列が多くそのせいでメモリ不足が発生している場合は「usecols」という引数に列名リストを指定して特定の列だけを読み込むようにすることでメモリを節約できます

 

import pandas as pd

#CSVのパス
csv_file_path="C://user~~~~"

# 読み込みたい列の名前をリストで指定
columns_to_load = [
    "列名①",
    "列名②",
    …]

df = pd.read_csv(csv_file_path, encoding="cp932", usecols=columns_to_load)

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

タイトルとURLをコピーしました