Подтвердить что ты не робот

Как найти строку, которая генерирует Pandas SettingWithCopyWarning?

У меня есть большой блок кода, который в какой-то момент где-то генерирует параметр с предупреждением об ошибке в pandas (этой проблеме).

Я знаю, как исправить эту проблему, но я не могу найти номер строки! Есть ли способ отменить номер строки (кроме методов грубой силы, таких как отладка или многократное отпечатки)? Единственный вывод, который я получаю, - это ниже, который не поднимается в стек до моего кода:

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)
4b9b3361

Ответ 1

Установить 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)