亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在函數內部定義全局時出現 UnboundLocalError

在函數內部定義全局時出現 UnboundLocalError

慕神8447489 2023-07-27 15:48:31
我知道這是一個非常常見的錯誤,但我可以找到我的錯誤。我有帶有周邊數據的數據框,例如:>>>name    perimeter0  al      24.51  dl      43.72  yl      1222.43  pl      213.24  kl      120...我想檢查周長中位數是多少,然后根據周長中位數添加新列。我在函數之前定義中位數,然后在函數內將中位數定義為全局:per_median=df['perimeter'].median()def z(row):    global per_median    if row['perimeter'] > per_median:        val = 'yes'    elif row['perimeter'] < per_median:        val = 'no'    return valdf['perimeter_warning'] = df.apply(z,axis=1)由于某種原因,即使我在函數內使用全局,我仍然收到此錯誤:UnboundLocalError:賦值前引用的局部變量“val”我做錯了什么?我預計將其定義為全局將解決問題。
查看完整描述

2 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

嘗試在代碼中添加另一種場景,其中

if row['perimeter'] == per_median: 然后為 val 設置一些值。

或者,如果您不想處理此問題,請在使用之前嘗試為 val 分配默認值。


查看完整回答
反對 回復 2023-07-27
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

缺少處理row['perimeter']等于的情況,因此未設置變量。per_medianval


編輯代碼來處理這種情況:


import pandas as pd

import numpy as np



df = pd.DataFrame({'name':['al', 'dl', 'yl', 'pl', 'kl'],

'perimeter':[24.5, 43.7, 1222.4, 213.2, 120]})



per_median=df['perimeter'].median()


def z(row):

    global per_median

    if row['perimeter'] > per_median:

        val = 'yes'

    elif row['perimeter'] < per_median:

        val = 'no'

    else:

        val = 'equals'

    return val


df['perimeter_warning'] = df.apply(z,axis=1)


print(df)

輸出:


  name  perimeter perimeter_warning

0   al       24.5                no

1   dl       43.7                no

2   yl     1222.4               yes

3   pl      213.2               yes

4   kl      120.0            equals


查看完整回答
反對 回復 2023-07-27
  • 2 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號