我正在使用for loop读取多个CSV文件并创建数据框架。我也想访问外部这些数据帧以进行循环。我也使用了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))))
您可以在上面看到,我想访问这些dataframes(df_name(我有3个dataframes,我有3个文件(以进行循环
如何使用全局关键字使这些数据范围可访问循环?
在用注释澄清后,您可以使用 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]
您需要在功能顶部定义变量名,然后使用
a = dataframe
def func():
global a
a = yourdataframe
您需要在声明变量使其全局之后添加单独的行像这样的东西
df_name = 'df' + name
global df_name
我可以理解您要实现的目标,但是为什么您希望您的代码有效。'df' + name
是string
,而不是变量;另外,您不会声明这样的外部变量。语法要简单得多,并且与熊猫无关。这是用法的示例:
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