44

ある時点で、パンダでコピー警告を含む設定を生成するコードの大きなブロックがあります(この問題)。

問題を解決する方法はわかっていますが、行番号がわかりません! 行番号を元に戻す方法はありますか (デバッグのステップ実行や複数の印刷を行うなどの強引な方法は別として)? 私が得る唯一の出力は以下であり、スタックを私のコードに上げません:

C:\Anaconda3\lib\site-packages\pandas\core\frame.py:2302: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame  **kwargs)
4

1 に答える 1

59

設定pd.options.mode.chained_assignment = 'raise'

これにより、SettingWithCopyError をトリガーする行を指す例外がスローされます。

更新: エラーをキャッチし、スタックトレースに問い合わせて実際に問題のある行番号を取得する方法:

import pandas as pd
from inspect import currentframe, getframeinfo
from pandas.core.common import SettingWithCopyError

pd.options.mode.chained_assignment = 'raise'

df = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]})

df2 = df[df['a'] == 2]

try:
    df2['b'] = 'foo'
except SettingWithCopyError:
    print('handling..')
    frameinfo = getframeinfo(currentframe())
    print(frameinfo.lineno)
于 2018-01-18T17:23:30.640 に答える