运行以下代码时,我"local variable 'col' referenced before assignment"收到此错误:


def log_hist(data):
data = pd.DataFrame([])
for col in data:
data_log = np.log(data[col])
return data[col].hist()


---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-127-dc391683ef40> in <module>()
----> 1 log_hist(df2)
<ipython-input-126-60d8684e3abe> in log_hist(data)
3     for col in data:
4         data_log = np.log(data[col])
----> 5     return data[col].hist()
6 
7 
UnboundLocalError: local variable 'col' referenced before assignment

由于您的数据框架为空,因此没有什么可迭代的。for循环不会实例化col变量。如果你的可迭代对象(数据框架)不是空的,那么这个变量在循环结束后是可用的。

思想的例子:

>>> for x in range(10):
...  pass
... 
>>> x
9
>>> for y in []:
...  pass
... 
>>> y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'y' is not defined
>>> 

变量col仅在for循环中有效。如果你想访问循环外的值(例如获取最后一个被循环处理的值),在循环外声明一个变量:

def log_hist(data):
last_col = None
for col in data:
np.log(data[col])
last_col = col
return data[last_col].hist()  # will raise an exception if the dataframe is empty!

请注意,我删除了函数开始处的行,该行将data参数归零-我认为这是一些调试尝试的一部分,但它显然完全破坏了函数在那里。:)

我还删除了data_log变量,因为它不在任何地方使用;给一个你从不使用的变量赋值是没有意义的。(我不熟悉np.log,我认为它有一个可取的副作用——否则循环开始时几乎没有意义,应该用只选择最后一列而不循环遍历整个对象的代码代替。)

相关内容

最新更新