如何在 Python 中处理另一个 Excel 文件

Posted

技术标签:

【中文标题】如何在 Python 中处理另一个 Excel 文件【英文标题】:How to handle another Excel file in Python 【发布时间】:2018-10-28 22:51:27 【问题描述】:

早上好。 我从 Python 开始,但我遇到了问题。 我需要找到所有 .xls 文件(都具有相同的标题)并将所有文件合并到一个 DataFrame 中,所以我需要说文件的第一行应该被忽略。 我正在使用的当前代码是这样的:

os.chdir("file folder path")
fileLista = glob.glob('*.xls')
df = list()
for arquivo in fileLista:
    df = df.append(pd.read_excel(arquivo))
    Company= pd.concat(df)
    Company.columns = Company.columns.str.strip()

我正在使用 Glob 返回所有 .xls 扩展文件, df.append 是将所有返回的文件合并到一个DataFrame里面, 公司concat是形成一个单一的文件, 公司条是删除它在列标题中的空格。 当我运行代码时,它返回给我这个错误: "erro NoneType' 对象不可迭代"

谁能帮我解决这个错误?

【问题讨论】:

哪一行触发了错误? 你能分享完整的回溯吗? 您检查过glob.glob('*.xls') 的输出吗?这可能是您的错误来自哪里。也不需要df.append,你已经在迭代fileLista,只需pd.concat,就足够了。 objs = list (objs) TypeError: 'NoneType' 对象不可迭代。行错误'Company = pd.concat(df)' Sim,verifiquei a saída do glob.glob e ele está me retornando os arquivos certos。 Então devo retirar o df.append ? 【参考方案1】:

这个怎么样?

fileLista = glob.glob('*.xls')
Company = pd.DataFrame()
for arquivo in fileLista:
    df = pd.read_excel(arquivo)
    Company= pd.concat([Company,df])
    Company.columns = Company.columns.str.strip()

【讨论】:

谢谢。您能否告诉我如何指示要读取的 excel 选项卡以及如何忽略第一行?我学会了如何做到这一点 pd.read_excel ('filename.xls', sheet_name = 'tabname', skiprows = 1)。当它只是一个文件时,我会这样做,在这种情况下,我怎样才能保持这种状态? 我不太确定你在问什么。您可以使用以下方式查询 Excel 文件:xlfile = pd.ExcelFile(arquivo)names = xlfile.sheet_names。 (另外,如果上面发布的答案是可以接受的,请点击接受答案。) 非常感谢,答案解决了我的问题。【参考方案2】:

这应该做你想做的。

import pandas as pd
import numpy as np

import glob
glob.glob("C:/your_path_here/*.xlsx")

all_data = pd.DataFrame()
for f in glob.glob("C:/your_path_here/*.xlsx"):
    df = pd.read_excel(f)
    all_data = all_data.append(df,ignore_index=True)
    print(all_data)

这是另一个可供考虑的选择。

import pandas as pd

# filenames
excel_names = ["C:/your_path_here/Book1.xlsx", "C:/your_path_here/Book2.xlsx", "C:/your_path_here/Book3.xlsx"]

# read them in
excels = [pd.ExcelFile(name) for name in excel_names]

# turn them into dataframes
frames = [x.parse(x.sheet_names[0], header=None,index_col=None) for x in excels]

# delete the first row for all frames except the first
# i.e. remove the header row -- assumes it's the first
frames[1:] = [df[1:] for df in frames[1:]]

# concatenate them..
combined = pd.concat(frames)

# write it out
combined.to_excel("c.xlsx", header=False, index=False)


# Results go to the default directory if not assigned somewhere else.
# C:\Users\Excel\.spyder-py3

【讨论】:

以上是关于如何在 Python 中处理另一个 Excel 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何利用python提取两个excel对比后的重复值的信息?

如何在WORD中插入另一个excel文件

在python中使用pandas数据框保存.xlsm(excel)文件的问题

python如何对excel数据进行处理

word表格怎么导入Excel

用python从符合一定格式的txt文档中逐行读取数据并按一定规则写入excel(openpyxl支持Excel 2007 .xlsx格式)