尽管使用Global关键字访问函数内部的变量仍发生错误 [英] Error despite Global keyword being used to access variable inside function
问题描述
我创建了一些全局变量,如下面的代码所示.但是,当我尝试在各个函数中使用它们时,仍然会出现相同的错误.
I have created few global variables as shown in my code below. However when I try to use them inside the individual functions, I still get the same error.
请在下面找到我的代码
def create_df():
global sheet_name, sheet_df
for s in sheets:
sheet_name = s
sheet_df = pd.read_excel(xls, sheet_name=s)
sheet_df = sheet_df[sheet_df.columns.difference(sheet_df.filter(like='Derived').columns,sort=False)]
print("Sheet " + str(s) + " is created as a dataframe successfully")
transform_stage_1_df()
def transform_stage_1_df():
global sheet_df
sheet_df = pd.melt(sheet_df, id_vars='subject_ID', var_name='headers', value_name='dates')
sheet_df['header_extracted'] = [x.split("Date")[0] for x in sheet_df['headers']]
sheet_df['day'] = sheet_df['header_extracted'].str.extract('(\d+)', expand=True).astype(int)
sheet_df = sheet_df[sheet_df.groupby(['subject_ID','header_extracted'])['dates'].transform('count').ne(0)].copy()
sheet_df = sheet_df.sort_values(by=['subject_ID','day'])
sheet_df.drop(['header_extracted', 'day'], axis=1, inplace=True)
print("Stage 1 transformation is complete")
if __name__ == '__main__':
print("Execution Started")
print("File read successfully")
sheets = xls.sheet_names
sheet_name = sheet_df = Non_Cholesterol = None
dataFramesDict = dict()
create_df()
add_units()
Non_Cholesterol.to_csv('Output.csv')
基于SO帖子,我已经更新了global关键字,但仍然得到了UnboundLocalError: local variable 'sheet_df' referenced before assignment
Based on SO posts, I have already updated the global keyword but still I get the UnboundLocalError: local variable 'sheet_df' referenced before assignment
UnboundLocalError Traceback (most recent call last)
<ipython-input-210-dc2f8412235d> in <module>
7 sheet_df = None
8 dataFramesDict = dict()
----> 9 create_df()
10 Non_Cholesterol.to_csv('C:\\Users' +
str('Non_cholesterol.csv'),index=None)
11 print("Export successful")
<ipython-input-205-c93604f0da4f> in create_df()
5 sheet_df =sheet_df[sheet_df.columns.difference(sheet_df.filter(like='Derived').columns,sort=False)]
6 print("Sheet " + str(s) + " is created as a dataframe
successfully")
----> 7 transform_stage_1_df()
<ipython-input-206-b59c70018a9b> in transform_stage_1_df()
1 def transform_stage_1_df():
----> 2 sheet_df = pd.melt(sheet_df, id_vars='subject_ID',
var_name='headers', value_name='dates')
3 sheet_df['header_extracted'] = [x.split("Date")[0] for x in
sheet_df['headers']]
4 sheet_df['day'] = sheet_df['header_extracted'].str.extract('(\d+)',
expand=True).astype(int)
5 sheet_df =
sheet_df[sheet_df.groupby(['subject_ID','header_extracted'])
['dates'].transform('count').ne(0)].copy()
UnboundLocalError: local variable 'sheet_df' referenced before assignment
推荐答案
您需要在脚本主体中初始化变量.当您说global variable_name
时,这意味着您将访问函数外部的变量,而不是名为variable_name
的局部变量.
You need to initialize the variables at the body of your script. When you say global variable_name
it means that you will be accessing the variable outside of the function instead of a local variable named variable_name
.
# Initialize the variables first
sheet_name = None
sheet_df = None
def create_df():
global sheet_name, sheet_df
for s in sheets:
sheet_name = s
sheet_df = pd.read_excel(xls, sheet_name=s)
sheet_df = sheet_df[sheet_df.columns.difference(sheet_df.filter(like='Derived').columns,sort=False)]
print("Sheet " + str(s) + " is created as a dataframe successfully")
transform_stage_1_df()
def transform_stage_1_df():
global sheet_df
sheet_df = pd.melt(sheet_df, id_vars='subject_ID', var_name='headers', value_name='dates')
sheet_df['header_extracted'] = [x.split("Date")[0] for x in sheet_df['headers']]
sheet_df['day'] = sheet_df['header_extracted'].str.extract('(\d+)', expand=True).astype(int)
sheet_df = sheet_df[sheet_df.groupby(['subject_ID','header_extracted'])['dates'].transform('count').ne(0)].copy()
sheet_df = sheet_df.sort_values(by=['subject_ID','day'])
sheet_df.drop(['header_extracted', 'day'], axis=1, inplace=True)
print("Stage 1 transformation is complete")
if __name__ == '__main__':
print("Execution Started")
xls = pd.ExcelFile('C:\\Users\\All.xlsx')
print("File read successfully")
sheets = xls.sheet_names
dataFramesDict = dict()
create_df()
这篇关于尽管使用Global关键字访问函数内部的变量仍发生错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!