在 for 循环之外访问多个动态变量 - Python 中的全局关键字
Access multiple dynamic variables outside for loop - Global keyword in Python
我正在使用 for 循环读取多个 csv 文件并创建 dataframe.I 也想在 for 循环之外访问这些数据帧。为此,我也使用了 Global
关键字,但它不起作用。
for file in os.listdir('C:\Users\ABCDE\Desktop\Measurement'):
if file.endswith('.csv'):
print(file)
name = file[3:6]
global df_name # this is the line
df_name = 'df' + name
print(df_name)
df_name = pd.read_csv('C:\Users\ABCDE\Desktop\Measurement\' + str(file),low_memory = False)
df_name.rename(columns={0:'values'},
inplace=True)
g = df_name.level_1.str[-2:] # Extracting column names
df_name['lvl'] = df_name.level_1.apply(lambda x: int(''.join(filter(str.isdigit, x))))
正如您在上面看到的,我也想在 for 循环之外访问这些数据帧(df_name(3 个数据帧,因为我有 3 个文件)
如何使用 Global 关键字使这些数据帧可在循环外访问?
你需要在函数的顶部定义变量名然后使用
a = dataframe
def func():
global a
a = yourdataframe
你需要在声明变量后单独添加一行使其成为全局变量
像这样
df_name = 'df' + name
global df_name
我能理解您想要实现的目标,但不明白您为什么期望您的代码能够运行。 'df' + name
是一个string
,不是变量;另外,您不会像那样声明外部变量。语法简单多了,和pandas没有关系。
这是一个用法示例:
a = 'foo'
def get_a():
global a
return a
def set_a(b):
global a
a = b
if __name__ == '__main__': # Just defining the entry point of the python script
print(get_a())
set_a(2)
print(get_a())
print(a)
下面是您应该期望的脚本输出:
'foo'
2
2
在你用评论澄清之后,你可以使用 list 或 dictionary.
来实现你想要的
dataFrames = list()
dataFrameDict = dict()
for file in os.listdir('C:\Users\ABCDE\Desktop\Measurement'):
if file.endswith('.csv'):
print(file)
name = file[3:6]
df_name = pd.read_csv('C:\Users\ABCDE\Desktop\Measurement\' + str(file),low_memory = False)
df_name.rename(columns={0:'values'},
inplace=True)
g = df_name.level_1.str[-2:] # Extracting column names
df_name['lvl'] = df_name.level_1.apply(lambda x: int(''.join(filter(str.isdigit, x))))
# ADD TO A LIST
dataFrames.append(df_name)
# OR TO A DICT
dataFramesDict[name] = df_name
# How to Access
# Index for 10 files would be 0-9
index = 0
dataFrames[index]
# Name of the dataset you want to access
name = "..."
dataFrameDict[name]
我正在使用 for 循环读取多个 csv 文件并创建 dataframe.I 也想在 for 循环之外访问这些数据帧。为此,我也使用了 Global
关键字,但它不起作用。
for file in os.listdir('C:\Users\ABCDE\Desktop\Measurement'):
if file.endswith('.csv'):
print(file)
name = file[3:6]
global df_name # this is the line
df_name = 'df' + name
print(df_name)
df_name = pd.read_csv('C:\Users\ABCDE\Desktop\Measurement\' + str(file),low_memory = False)
df_name.rename(columns={0:'values'},
inplace=True)
g = df_name.level_1.str[-2:] # Extracting column names
df_name['lvl'] = df_name.level_1.apply(lambda x: int(''.join(filter(str.isdigit, x))))
正如您在上面看到的,我也想在 for 循环之外访问这些数据帧(df_name(3 个数据帧,因为我有 3 个文件)
如何使用 Global 关键字使这些数据帧可在循环外访问?
你需要在函数的顶部定义变量名然后使用
a = dataframe
def func():
global a
a = yourdataframe
你需要在声明变量后单独添加一行使其成为全局变量 像这样
df_name = 'df' + name
global df_name
我能理解您想要实现的目标,但不明白您为什么期望您的代码能够运行。 'df' + name
是一个string
,不是变量;另外,您不会像那样声明外部变量。语法简单多了,和pandas没有关系。
这是一个用法示例:
a = 'foo'
def get_a():
global a
return a
def set_a(b):
global a
a = b
if __name__ == '__main__': # Just defining the entry point of the python script
print(get_a())
set_a(2)
print(get_a())
print(a)
下面是您应该期望的脚本输出:
'foo'
2
2
在你用评论澄清之后,你可以使用 list 或 dictionary.
来实现你想要的dataFrames = list()
dataFrameDict = dict()
for file in os.listdir('C:\Users\ABCDE\Desktop\Measurement'):
if file.endswith('.csv'):
print(file)
name = file[3:6]
df_name = pd.read_csv('C:\Users\ABCDE\Desktop\Measurement\' + str(file),low_memory = False)
df_name.rename(columns={0:'values'},
inplace=True)
g = df_name.level_1.str[-2:] # Extracting column names
df_name['lvl'] = df_name.level_1.apply(lambda x: int(''.join(filter(str.isdigit, x))))
# ADD TO A LIST
dataFrames.append(df_name)
# OR TO A DICT
dataFramesDict[name] = df_name
# How to Access
# Index for 10 files would be 0-9
index = 0
dataFrames[index]
# Name of the dataset you want to access
name = "..."
dataFrameDict[name]