我知道这是非常严重的错误,但我可以找到我的错误。我有带有周边数据的数据,例如:
>>>name perimeter
0 al 24.5
1 dl 43.7
2 yl 1222.4
3 pl 213.2
4 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 val
df['perimeter_warning'] = df.apply(z,axis=1)由于某些原因,即使在函数中使用全局,我仍然会得到以下错误:
UnboundLocalError:赋值前引用的局部变量“val”
我做错什么了?我被切掉了,认为它是全球性的,可以解决这个问题。
发布于 2020-09-10 14:41:57
尝试在代码中再添加一个场景
如果行“周长”== per_median:然后为val设置一些值。
或者,如果您不想处理这个问题,请尝试在使用之前为val分配一个默认值。
发布于 2020-09-10 14:45:06
处理缺少row['perimeter']等于per_median的情况,因此没有设置变量val。
编辑了处理该场景的代码:
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 equalshttps://stackoverflow.com/questions/63831841
复制相似问题