从不同目录中的文件夹打开多个“.xls”文件,并使用Pandas创建一个数据帧

2024-06-07 05:39:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从特定目录打开文件夹中的多个xls文件。我希望读入这些文件,并在一个数据帧中打开所有这些文件。到目前为止,我能够访问目录并将所有xls文件放入如下列表中

import os
import pandas as pd

path = ('D:\Anaconda Hub\ARK analysis\data\year2021\\february') 
files = os.listdir(path)

files
# outputting the variable files which appears to be a list. 
Output:
['ARK_Trade_02012021_0619PM_EST_601875e069e08.xls',
 'ARK_Trade_02022021_0645PM_EST_6019df308ae5e.xls',
 'ARK_Trade_02032021_0829PM_EST_601b2da2185c6.xls',
 'ARK_Trade_02042021_0637PM_EST_601c72b88257f.xls',
 'ARK_Trade_02052021_0646PM_EST_601dd4dc308c5.xls',
 'ARK_Trade_02082021_0629PM_EST_6021c739595b0.xls',
 'ARK_Trade_02092021_0642PM_EST_602304eebdd43.xls',
 'ARK_Trade_02102021_0809PM_EST_6024834cc5c8d.xls',
 'ARK_Trade_02112021_0639PM_EST_6025bf548f5e7.xls',
 'ARK_Trade_02122021_0705PM_EST_60270e4792d9e.xls',
 'ARK_Trade_02162021_0748PM_EST_602c58957b6a8.xls']

我现在尝试将其放入一个数据帧中,如下所示:

frame = pd.DataFrame()

for f in files:
    data = pd.read_excel(f, 'Sheet1')
    frame.append(data)
    
df = pd.concat(frame, axis=0, ignore_index=True)

但是,在执行此操作时,我有时会获得一个空白数据帧,或者它会引发如下错误:

FileNotFoundError: [Errno 2] No such file or directory: 'ARK_Trade_02012021_0619PM_EST_601875e069e08.xls'

我们将非常感谢您对这项任务的帮助

提前谢谢


Tags: 文件数据pathimport目录文件夹dataos
2条回答

您可以添加一个中间步骤来检查路径是否存在,我怀疑这是您的服务器的一个孤立问题,在旧的windows服务器上工作时(即2012年),我有时会遇到无法找到路径的问题,即使它100%存在

import pandas as pd
from pathlib import Path 

# assuming you want xls and xlsx. 
files = Path('folder_location').glob('*.xls*') 

dfs = []

for file in files:
    if file.is_file():
        df = pd.read_excel(file, sheet_name='sheet')
        dfs.append(df)

final_df = pd.concat(dfs)

出现此问题的原因是,如果您只是简单地输入文件名,解释器会假定它位于当前工作目录中,因此您需要使用os模块来获取正确的位置:

import os
import pandas as pd

path = ('D:\Anaconda Hub\ARK analysis\data\year2021\\february') 
files = os.listdir(path)

#frame = pd.DataFrame()   ...This will not work!
frame = []  # Do this instead 

for f in files:
    data = pd.read_excel(os.path.join(path, f), 'Sheet1')  # Here join filename with folder location
    frame.append(data)
    
df = pd.concat(frame, axis=0, ignore_index=True)

另一个问题是frame应该是一个列表或其他一些iterable。Pandas对数据帧有append方法,但是如果您想使用concat,那么它需要是一个列表

相关问题 更多 >