从python pandas中的多个目录中的多个excel文件中提取数据

时间:2017-09-06 13:41:34

标签: python python-3.x pandas

我是Python新手,我是第一次在堆栈溢出中发布问题。请帮助解决问题。

我的主目录是' E:\ Data Science \ Macros \ ZBILL_Dump',包含按月分类的文件夹,每个文件夹包含按日期分享的Excel数据。

我能够从单个文件夹中提取数据:

import os
import pandas as pd
import numpy as np

# Find file names in the specified directory
loc = 'E:\Data Science\Macros\ZBILL_Dump\Apr17\\'
files = os.listdir(loc)

# Find the ONLY Excel files 
files_xlsx = [f for f in files if f[-4:] == 'xlsx']

# Create empty dataframe and read in new data
zbill = pd.DataFrame()
for f in files_xlsx:
    New_data = pd.read_excel(os.path.normpath(loc + f), 'Sheet1')
    zbill = zbill.append(New_data)

zbill.head()

我正在尝试从主目录中提取数据,即" ZBILL_Dump"其中包含许多子文件夹,但我无法做到。请有人帮助我。

非常感谢。

2 个答案:

答案 0 :(得分:1)

你可以使用glob。

import glob
import pandas as pd

# grab excel files only
pattern = 'E:\Data Science\Macros\ZBILL_Dump\Apr17\\*.xlsx'

# Save all file matches: xlsx_files
xlsx_files = glob.glob(pattern)

# Create an empty list: frames
frames = []

#  Iterate over csv_files
for file in xlsx_files:

    #  Read xlsx into a DataFrame
    df = pd.read_xlsx(file)

    # Append df to frames
    frames.append(df)

# Concatenate frames into dataframe
zbill = pd.concat(frames)

如果要查看不同的子目录,可以使用正则表达式。使用'filepath/*/*.xlsx'搜索下一个级别。更多信息https://docs.python.org/3/library/glob.html

答案 1 :(得分:0)

使用glob及其递归功能搜索子目录:

import glob
files = glob.glob('E:\Data Science\Macros\ZBILL_Dump\**\*.xlsx', recursive=True)

文档:https://docs.python.org/3/library/glob.html