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
,我认为它有一个可取的副作用——否则循环开始时几乎没有意义,应该用只选择最后一列而不循环遍历整个对象的代码代替。)