【问题标题】:Iterate through excel files and sheets and concatenate in Python遍历 excel 文件和工作表并在 Python 中连接
【发布时间】:2019-09-25 17:32:54
【问题描述】:

假设我有一个文件夹,其中包含多个扩展名为 xlsxxls 的 excel 文件,它们共享相同的标题列 a, b, c, d, e,除了几个文件中的一些空表。

我想迭代所有文件和工作表(空工作表除外)并将它们连接成一个文件output.xlsx 的一张表。

我已经遍历了所有 excel 文件并将它们附加到一个文件中,但是如果每个文件的所有工作表有多个工作表,我该如何迭代?

我需要将下面的两个代码块整合为一个。感谢您的帮助。

import pandas as pd
import numpy as np
import glob

path = os.getcwd()
files = os.listdir(path)
files

df = pd.DataFrame()

# method 1

excel_files = [f for f in files if f[-4:] == 'xlsx' or f[-3:] == 'xls']
excel_files

for f in excel_files:
    data = pd.read_excel(f)
    df = df.append(data)

# method 2

for f in glob.glob("*.xlsx" or "*.xls"):
    data = pd.read_excel(f)
    df = df.append(data, ignore_index=True)

# save the data frame
writer = pd.ExcelWriter('output.xlsx')
df.to_excel(writer, 'sheet1')
writer.save()

一个文件连接多张表:

file = pd.ExcelFile('file.xlsx')

names = file.sheet_names  # read all sheet names

df = pd.concat([file.parse(name) for name in names])

【问题讨论】:

    标签: python pandas dataframe concatenation


    【解决方案1】:
    import pandas as pd
    
    path = os.getcwd()
    files = os.listdir(path)
    files
    
    excel_files = [file for file in files if '.xls' in file]
    excel_files
    
    def create_df_from_excel(file_name):
        file = pd.ExcelFile(file_name)
    
        names = file.sheet_names
    
        return pd.concat([file.parse(name) for name in names])
    
    df = pd.concat(
        [create_df_from_excel(xl) for xl in excel_files]
    )
    
    # save the data frame
    writer = pd.ExcelWriter('output.xlsx')
    df.to_excel(writer, 'sheet1')
    writer.save()
    

    【讨论】:

    • 非常感谢。我已经用我的数据尝试过你的方法,但是output.xlsx 文件有一些空列,例如:'Unnamed: 10','Unnamed: 11','Unnamed: 12',你知道如何避免这种情况吗?
    • 这可能只是具有空 unicode 数据的 excel 文件的问题。您可以在return ... 行之前的create_df_from_excel 中添加一行,使用df.dropna(axis=1, how='all') 删除空列
    猜你喜欢
    • 2023-01-20
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多