如何找到生成带复制警告设置的行?

tim*_*321 19 python warnings pandas chained-assignment

我有一大块代码,在某些地方,在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)
Run Code Online (Sandbox Code Playgroud)

Jul*_*ius 27

尝试设置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)
Run Code Online (Sandbox Code Playgroud)

  • 如果要在找到该行之后将其更改回去,可以使用`pd.options.mode.chained_assignment ='warn'` (2认同)