在 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

在你用评论澄清之后,你可以使用 listdictionary.

来实现你想要的
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]