簡體   English   中英

運行以下代碼時,我收到此錯誤“分配前引用的局部變量 'col'”:

[英]I am getting this error “local variable 'col' referenced before assignment” when running the following code:

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

由於您的 dataframe 是空的,因此沒有什么可以迭代的。 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!

請注意,我刪除了 function 開頭的行,它清零了data參數——我認為這是一些調試嘗試的一部分,但它顯然完全破壞了 function 在那里。 :)

我還刪除了data_log變量,因為它沒有在任何地方使用; 分配一個你從不使用的變量是沒有意義的。 (我不熟悉np.log ,我認為它有一個可取的副作用 - 否則循環開始時大多毫無意義,應該用只選擇最后一列而不循環整個object。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM