課題
- データフレームをいじくり回す処理のデバッグをサクサクやりたい
- pdbデバッグもいいけど、ソースを編集するのが嫌
前提
VScodeが好き
解決方法概要(目次)
VScodeにて
- ブレークポイントを置いて
- デバッグモードで実行し
- デバッグコンソールを使う
- データフレームを表示させるために、launch.jsonに一行追記
解決方法詳細
ブレークポイントを置く
行番号の左にマウスカーソルを持っていき、クリックして赤丸をつける
デバッグモードで実行
デバッグコンソールを使う
デバッグコンソール画面に移動し、変数名を入れてエンターキー押したりして、色々確認する
データフレームが上手く表示されなくて困る
データフレームを表示させるために、launch.jsonに一行追記
cmd + shift + Pを押してコマンドパレットを開き、
「launch」と入力し、
launch.jsonを開くをクリック
「"redirectOutput": true」を追記して上書き保存(直前行の最後に「,」も忘れず)
一度デバッグを終了して再度デバッグを開始。
デバッグコンソールでprint(df)をやってみる
データフレームが見やすく整列して表示された
※なぜこれで上手くいくのかは分かってない。ググって↓に辿り着いて真似た。
https://github.com/microsoft/ptvsd/issues/2036#issuecomment-573343490
おまけ)デバッグコンソールで複数行の処理
補足
動作環境: Mac、Python3.7
デバッグ対象としたサンプルコード:
# create test data
a = 15
import pandas as pd
df = pd.DataFrame(
columns = ['name', 'gender', 'age'],
data = [
['john', 'man', 25],
['yoko', 'woman', 28],
['kevin', 'man', 45]
]
)
# processing
a = a - 1
df['age'] = df['age'] - 10
おまけのデバッグコンソールで使ったコード:
for age_hosei in [10, -10]:
print('--------------------------')
print('age_hosei', age_hosei)
tmp = df.copy()
print('tmp:\n', tmp)
tmp['age'] = tmp['age'] + age_hosei
result = tmp.groupby('gender')['age'].sum()
print('result:\n', result)