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

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

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

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

Q&A

解決済

1回答

760閲覧

pandasに辞書型の値を代入する時、途中から速度が異常に遅くなる

kakini

総合スコア42

Python 3.x

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

0グッド

0クリップ

投稿2022/01/03 08:51

編集2022/01/03 08:53

環境
window10 home
anaconda3

事前に計算させて辞書型に保存していた値をpandasを使ってデータフレームにした後
エクセルとして保存させるプログラムを実行させていたのですが
その作業が時間を追う毎に凄く遅くなっていきます
保存させる時のコードは下記です

python

1cols = ["3時傾き", "日傾き", "組み合わせA", "組み合わせB", "合計値", "最大持ち越し回数", 2"総回数", "勝ち数", "負け数", "勝率"] 3df = pd.DataFrame(index=[], columns = cols) 4for n, value in enumerate(summary_temp.values()): 5 #print(n) 6 all_value = pd.Series(value, index=df.columns) 7 df.loc[n+1] = all_value 8df.to_csv(保存先省略)

このコードの前にsummary_tempという辞書型にとある計算をさせた一つのキーに対して10個の値を代入します
辞書型の長さはlen関数で測れば大体20万の長さがある物です

一つの辞書型の変数を作りだしエクセルとして保存する1ループに大体40,50分くらいかかっていました
※この20万の長さの辞書型の保存作業は組み合わせAと組み合わせBを変えて合計で大体80回くらいループさせます

最初の内はハッキリ目視してないのでどの程度かわからないのですが保存作業自体はすぐに終わっていたはずです
しかしその後4,5ループ目辺りからスピードが異常に遅くなり調べた所
辞書型に計算結果を代入させる計算作業自体は恐らくスピードは変わっていませんでしたが

エクセルとして保存する部分の上記のコードでprint(n)を付けてどの位のスピードでやっているのか確認したら
時間が経つ毎にスピードが異常に遅くなっているのを確認しました
※保存する作業だけで2,3時間はかかりそうな程遅いスピードです

上の方法以外ですぐに保存できる方法を教えていただけないでしょうか
それとこれは可能であればでいいのですが
何故上記のコードだと最初2,3ループ目はすぐに保存できたのに
その後異常に遅くなったのかわかる方がいたら教えていただけないでしょうか

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

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

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

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

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

melian

2022/01/03 11:09

見たところ、その for ループは df = pd.DataFrame(summary_temp.values(), columns = cols) と等価に思えます。
kakini

2022/01/07 03:11

こんにちは ありがとうございます、たしかにこれだと一瞬で保存することができました
guest

回答1

0

ベストアンサー

  • その後異常に遅くなったのか

こういうやり方だと、徐々に大きいメモリを割り当てるため、使わなくなったより小さいメモリが再利用できません。そのためにPythonのプロセスがmallocを使ってメモリ空間を拡げていくのでページングが多はするようになります。これが速度低下の原因です。

  • 上の方法以外ですぐに保存できる方法を教えていただけないでしょうか

ケースバイケースですので、一般的な方法はありません。summary_tempの具体的な中身がわからないため、方法があるかどうかはわかりません。

投稿2022/01/03 09:26

ppaul

総合スコア24670

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

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

kakini

2022/01/07 03:14

回答ありがとうございます。 メモリ関連のプログラムはまだ全く勉強したことなくてよくわからなかったのですが 調べてメモリの開放というのを知り色々学ばさせていただきました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問