将多个工作簿中的单个Excel工作表捕获到熊猫数据框中,并将其保存

时间:2019-07-16 19:54:16

标签: python excel pandas

我需要从多个工作簿中提取一个Excel工作表,并将其保存到一个数据框,然后再保存该数据框。

我有一个在每个月底生成的电子表格(例如
 2019年6月。xlsx,2019年5月。xlsx,2019年4月。xlsx)。
我需要从每个工作簿中获取一个工作表“ Sheet1”,并将它们转换为数据帧(df1)。

我想保存此数据框。

作为一个很好的选择,我还想以某种方式在最初的“数据抓取”之后追加下个月的数据。

我对此还比较陌生,所以我没有取得太大进步。

import os
import glob
import pandas as pd 
import xlrd
import json
import io
import flatten_json

files = glob.glob('/Users/ngove/Documents/Python Scripts/2019/*.xlsx')
dfs={}
 for f in files: 
  dfs[os.path.splitext(os.path.basename(f))[0]] = pd.read_excel(f)

2 个答案:

答案 0 :(得分:0)

我解释了您要保存数据框的声明,就像您要将其保存为合并的Excel文件一样。这将合并指定文件夹中以xlsx结尾的所有文件。

import os
import pandas as pd
from pandas import ExcelWriter

os.chdir("H:/Python/Reports/") #edit this to be your path
path = os.getcwd()
files = os.listdir(path)
files_xlsx = [f for f in files if f[-4:] == 'xlsx']

df = pd.DataFrame()
for f in files_xlsx:
    data = pd.read_excel(f, 'Sheet1')
    df = df.append(data)

writer=ExcelWriter('Combined_Data.xlsx')
df.to_excel(writer,'Sheet1',index=False)
writer.save()

您可以通过将一行更改为以下内容来更新代码以捕获所有2019年文件:

files_xlsx = [f for f in files if f[-9:] == '2019.xlsx']

我引用了this question的大部分代码,并针对xlsx进行了更新,并添加了代码的文件保存部分

答案 1 :(得分:0)

您可以将所有文件放在目录(例如当前目录)中。然后,将所有所有excel文件添加到列表中(例如files_xls)。遍历所有文件,并使用pandas.read_excel获取相应的数据帧(例如list_frames)。

下面,您可以找到一个示例:

import os
import pandas as pd

path = os.getcwd() # get cur dir
files = os.listdir(path) # get all the files in your cur dir 
# get only the xls or xlsm (this depends on you)
files_xls = [f for f in files if (f[-3:] == 'xls' or f[-4:] == 'xlsm')]

df = pd.DataFrame()
list_frames = []

for f in files_xls:
    print("Processing file: %s" %f)
    try:
        # the following will give you the dataframe
        # the fun params depends on your data format
        data = pd.read_excel(f, 'Sheet1', header=0, index_col=None,
                             sep='delimiter', error_bad_lines=False,
                             skip_blank_lines=True, comment=',,')

    except:
        pass
    list_frames.append(data)

# at the end you can concat your data if you want and remove any dublicate
df = pd.concat(list_frames, sort=False).fillna(0)
df = df.drop_duplicates()

# at the end you can save it
writer = pd.ExcelWriter("your_title" + ".xlsx", engine='xlsxwriter')
df.to_excel(writer, sheet_name="Sheets1", index=False)   
writer.save()

我希望这会有所帮助。