我正在尝试创建一个for循环,以将多个Excel文件导入多个数据帧。
我试图用两个变量做一个for循环,其中f代表文件的路径,而i代表从1到len(files)的不同数据框,因此该数据框将被命名为“ 1”并包含从第一个开始的Excel路径等。
path = os.getcwd()
files = os.listdir(path)
for f, i in zip(files, np.arange(len(files))):
i = pd.read_excel(f)
相反,似乎我只得到一个仅包含一个excel文件的名为“ i”的数据框。在此先感谢您,我是新手:)
答案 0 :(得分:0)
我认为您不需要先为路径执行os.getcwd()。 os.listdir()应该可以正常工作。
如果xlsx文件是目录中唯一的文件:
这将创建数据帧的列表,然后如果它们是相同的结构,则可以使用pd.concat
来将它们组合在一起。
files = os.listdir()
dataframes = []
for file in files:
dataframes.append(pd.read_excel(file))
combined_dataframes = pd.concat(dataframes, sort=False)
OR
dataframe_series = pd.Series(dataframes)
以下内容将创建一个字典,其中的键名为“ excel_file_1”,“ excel_file_2”等。
dataframes = {}
for i, file in enumerate(files):
name = 'excel_file_' + str(i+1)
dataframes[name] = pd.read_excel(file)
答案 1 :(得分:0)
首先,i
的作用域仅在for循环内,因此您永远不会使用i
使数据帧脱离循环。其次,您正在使用变量i
进行循环,然后将数据帧分配给i
,然后再次与i
循环,并再次分配给i
,覆盖{{1 }}在每个循环中;这就是您仅获取最新excel数据的原因。第三,不能用数字命名对象,这就是变量的作用。
我建议列出一个数据框:
i
现在,您可以访问每个单独的数据帧,调用它们自己的变量dataframes = [] # list of dataframes, empty at the begining
for f in files:
dataframes.append(pd.read_excel(f))
,dataframes[0]
,dataframes[1]
...