只读取包含特定单词的Excel工作表名称,并将其转换为pandas数据框。

9 浏览
0 Comments

只读取包含特定单词的Excel工作表名称,并将其转换为pandas数据框。

我有很多报告,我想将它们编译成一个Python的单一数据框。

这段代码可以循环遍历我的目录,并读取所有报告文件,其中的工作表名称在每个文件中都是相同的...我每个工作簿中有很多工作表,但我只想找到包含特定字符串'Report'的工作表名称。

import pandas as pd
from pathlib import Path
import os
import glob
pathsting= 'path/to/working/directory'
rootdir = Path(pathsting)
onlydirs = [f for f in os.listdir(rootdir) if os.path.isdir(os.path.join(rootdir, f))]
df0 = pd.DataFrame()
for direct in onlydirs:
    print(direct)
    dirpathstring = pathsting + '\\' + direct
    dirpath = Path(dirpathstring)
    onlyfiles = [f for f in os.listdir(dirpath) if os.path.isfile(os.path.join(dirpath, f))]
    for f in dirpath.glob("*Report.xlsm"):
        print(f.name)
        temp = pd.read_excel(f, sheet_name='Report')
        df0 = pd.concat([df0, temp])
display(df0)

现在假设随着时间的推移,报告的格式发生了变化,而不是 sheet_name='Report',它变成了 sheet_name='XYZ Report'。我有很多报告,名称会变几次。我不想在多个不同的循环中硬编码所有可能的报告名称。

我能够使用glob读取所有以'Report.xlsm'结尾的文件,但是否有一种类似的方法可以读取包含文本'Report'而不是完全相同字符串的工作表名称?

0
0 Comments

只读取包含特定词语的Excel表格名称到pandas数据帧的问题是因为需要从多个Excel文件中提取特定词语的表格数据,并将其存储到一个数据帧中。下面是解决该问题的方法:

1. 首先,使用glob模块获取指定路径下的所有Excel文件路径,并将其存储在一个列表中。

import glob
path = r'./files' # 使用你的路径
all_files = glob.glob(path + "/*.xlsm")

2. 然后,使用正则表达式模式来筛选文件名中包含特定词语的文件。可以使用re模块来实现这一点。

import re
pattern = r'(?i)(.*report.*)' # 不区分大小写的文件名模式,如blahReportblah或fooreportingss等

3. 创建一个空列表,用于存储从符合条件的表格中提取的数据帧。

dfs = []

4. 对于每个文件,打开Excel文件并遍历其中的每个表格。

for file in all_files:
    ex_file = pd.ExcelFile(file)
    for sheet in ex_file.sheet_names:

5. 检查表格名称是否包含特定词语,如果是,则创建一个数据帧,并将其添加到列表中。

if re.search(pattern, sheet):
    df = ex_file.parse(sheet, parse_dates=True)
    dfs.append(df)

6. 最后,根据列表中的数据帧数量来处理不同的情况。如果列表为空,则输出"No file or sheets found.";如果列表中只有一个数据帧,则将其赋值给变量df;如果列表中有多个数据帧,则使用pd.concat()函数将它们合并为一个数据帧。

if len(dfs) == 0:
    print('No file or sheets found.')
    df = pd.DataFrame()
elif len(dfs) == 1:
    df = dfs[0]
else:
    df = pd.concat(dfs, ignore_index=True)
    df = df.reset_index(drop=True)

7. 最后,输出数据帧的前几行以进行检查。

print(df.head())

通过以上步骤,我们可以实现只读取包含特定词语的Excel表格名称到pandas数据帧的需求。这样可以方便地从多个Excel文件中提取所需数据,并进行后续的分析和处理。

0
0 Comments

在处理Excel文件时,有时我们只想读取包含特定词语的工作表,并将其转换为pandas数据框。这种需求可能出现在我们需要处理大型Excel文件,但只对特定工作表感兴趣的情况下。本文将介绍这个问题的原因以及解决方法。

问题的原因是我们需要对Excel文件中的特定工作表进行筛选和读取。通常情况下,我们可以直接使用pandas的read_excel函数来读取整个Excel文件,并通过sheet_name参数指定要读取的工作表。但是,当Excel文件非常大且包含大量工作表时,直接读取整个文件可能会导致内存问题,并且读取时间可能较长。因此,我们需要一种方法来仅读取包含特定词语的工作表。

解决这个问题的方法是创建一个函数来筛选工作表,并将符合条件的工作表转换为pandas数据框。为了实现这个目标,我们可以使用Python的xlrd库来获取Excel文件中的所有工作表名称。具体来说,我们可以使用xlrd库中的open_workbook函数打开Excel文件,并使用sheet_names方法获取所有工作表的名称。然后,我们可以遍历所有工作表名称,并使用Python的字符串方法来检查是否包含特定词语。

以下是一个示例函数,用于读取包含特定词语的工作表并将其转换为pandas数据框:

import pandas as pd
import xlrd
def read_excel_with_word(file_path, word):
    workbook = xlrd.open_workbook(file_path)
    sheet_names = workbook.sheet_names()
    selected_sheets = [sheet for sheet in sheet_names if word in sheet]
    dataframes = []
    for sheet in selected_sheets:
        df = pd.read_excel(file_path, sheet_name=sheet)
        dataframes.append(df)
    return pd.concat(dataframes, ignore_index=True)
# 使用示例
file_path = "example.xlsx"
word = "Report"
df = read_excel_with_word(file_path, word)

在上面的示例中,read_excel_with_word函数接收两个参数:file_path表示Excel文件的路径,word表示要筛选的词语。函数首先使用xlrd库打开Excel文件,并获取所有工作表的名称。然后,它使用列表推导式筛选出包含特定词语的工作表名称。接下来,函数遍历筛选后的工作表名称,并使用pandas的read_excel函数读取每个工作表的数据,并将其添加到一个列表中。最后,函数使用pd.concat函数将所有数据框合并为一个数据框,并返回结果。

通过使用上述方法,我们可以方便地读取包含特定词语的工作表,并将其转换为pandas数据框。这种方法可以减少内存占用,并提高读取大型Excel文件的效率。

0