通过读取文件名以编程方式将 excel 文件插入 pandas 数据框

programtically ingesting xl files to pandas data frame by reading filename

我有一个包含 6 个文件的文件夹,其中 4 个是 excel 个我想放入 pandas 的文件,另外 2 个只是其他文件。我希望能够使用 pathlib 来处理文件夹,以自动将我想要的 excel 文件提取到单个 pandas 数据帧中。我还希望能够使用 excel 文件的名称(不带文件扩展名)

来命名每个新数据框

例如

import pandas as pd
import pathlib as pl

folder = pl.WindowsPath(r'C:\Users\username\project\output')
files = [e for e in folder.iterdir()]

for i in files:
    print(i)

['C:\Users\username\project\output\john.xlsx',
    'C:\Users\username\project\output\paul.xlsx',
    'C:\Users\username\project\output\random other file not for df.xlsx',
    'C:\Users\username\project\output\george.xlsx',
    'C:\Users\username\project\output\requirements for project.txt',
    'C:\Users\username\project\output\ringo.xlsx' ] 

从这里开始,我希望能够做类似

的事情
for i in files:
    if ' ' not in str(i.name):
        str(i.name.strip('.xlsx'))) = pd.read_excel(i)

读取文件名,如果它不包含任何空格,则获取名称,删除文件扩展名并将其用作从 excel 构建的 pandas 数据框的变量名文件。

如果我正在做的事情不可行,那么我还有其他方法可以做到,但它们重复了很多代码。

感谢任何帮助。

使用 pathlibre

我们可以在字典理解中排除任何与特定模式匹配的文件,即具有 space.

的任何文件
from pathlib import Path
import re 
import pandas as pd

pth = (r'C:\Users\username\project\output')

files = Path(pth).glob('*.xlsx') # use `rglob` if you want to to trawl a directory.


dfs = {file.stem : pd.read_excel(file) for file in 
                   files if not re.search('\s', file.stem)}

基于以上你会得到:

{'john': pandas.core.frame.DataFrame,
 'paul': pandas.core.frame.DataFrame,
 'george': pandas.core.frame.DataFrame,
 'ringo': pandas.core.frame.DataFrame}

其中 pandas.core.frame.DataFrame 是您的目标数据框。

然后您可以通过 dfs['john']

调用它们