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 回答