【问题标题】:Creating pandas database from multiple excel template files - python 3从多个 excel 模板文件创建 pandas 数据库 - python 3
【发布时间】:2018-11-27 15:28:24
【问题描述】:

我下面的代码有效,但我是 python 新手,感觉应该有更好的方法......

公司在 Excel 模板中填写有关其员工的一些统计数据,因此文件每次都采用完全相同的格式。

大约有 150 个单独的文件,它们是 Excel 格式(.xls 格式,我不知道为什么,但我没有参与发送这些文件!)。所需的数据存储在单独的单元格中:

单元格 C6 = 公司名称,单元格 C13 = 工作数量等

我想做的是为每个文件创建一行,所以我的标题是

文件名 |姓名 |职位 |等|等等

我创建了一个空列表并将每个新文件值附加到列表中,然后创建了一个字典并转换为一个数据框

all_files = []
all_name = []
all_jobs_current = []
#etc (approx 10 more)

for f in glob.glob('**/*.xls'):
    CF = xlrd.open_workbook(f)
    sheet = CF.sheet_by_name('Confirmation form')
    name = sheet.cell(5,2).value #cell C6
    jobs_current = sheet.cell(12,2).value #cell C13
    #etc

    all_files.append(f)
    all_name.append(name)
    all_jobs_current.append(jobs_current)
    #etc

d = {'Filename': all_files,
     'Name': all_name,
     'Jobs': all_jobs_current}
     #etc

df = pd.DataFrame(d)

编辑 1:我尝试根据反馈进行更新(我接受我可能写错了)但我收到以下错误:unhashable type: list

dcell = {'Name': (5,2),
         'Jobs': (12,2)}
dlist = {k: [] for k in list(dcell.keys())}

for f in glob.glob('**/*.xls'):
    for k, v in dlist.items():
        CF = xlrd.open_workbook(f)
        sheet = CF.sheet_by_name('Confirmation form')
        dlist[v].append(sheet.cell(*dcell[k]).value)

【问题讨论】:

    标签: python excel python-3.x pandas glob


    【解决方案1】:

    看起来像字典的工作:

    dcell = {'name': (5,2), 'jobs_current': (12,2) ... }
    dlist = {k: [] for k in list(dcell.keys())}
    
    for k, v in dlist.items():
        dlist[k].append(sheet.cell(*dcell[k]).value)
    

    您仍然需要遍历文件并自行创建该文件列表,但随后您可以将该列表合并到dlist

    【讨论】:

    • 谢谢你,我可以计算出你的代码应该做什么,但它比我迄今为止所做的任何事情都更具技术性!我尝试编辑原始代码,但收到错误 unhashable type: list.
    • 我已将新代码作为 EDIT 1 放入原始帖子中
    • 对不起,有一个错字,是dlist[k]而不是dlist[v]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2021-08-10
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多