使用Python清理Excel电子表格

时间:2017-11-12 04:46:19

标签: python excel pandas

我有一个似乎是一个简单的任务 - 我差不多完成了,但有一个麻烦的问题我应该能够摆脱,但这是难以捉摸的。

我有许多Excel .xls文件。文件名的格式为.xls。我创建了filenames.txt文件来迭代以获取公司名称。 每个文件在前4行中都有垃圾数据,所以我需要删除所有文件中的前四行。然后,我需要在第一列位置添加一列。

我的代码运行时没有错误,但输出并不是我需要的。 我遇到的唯一问题是: 我正在获得一个领先的专栏,我没想到索引号。 2. strip命令似乎没有剥离'.xls' - 所以最终被插入Excel中的列是.xls而不仅仅是.xls。 3.因为'.xls'没有被正确剥离,所以to_excel命令正在使用'.xls.xls'扩展名保存文件。

我读了几个类似的场景,所以我使用了这个代码:

import pandas as pd
import os
path = os.chdir(r"C:\Users\mheitz\Documents\testing")

filenames = [names.strip('\n') for names in \            
    open(r"C:\Users\mheitz\Documents\testing\filenames.txt",'r').readlines()]

for name in filenames:
    vendors = pd.read_excel(name, header = 11, skiprows =0-10)
    vendors.insert(0,'Vendor Name',(name[:-4]))
    vendors.to_excel(r"C:\Users\mheitz\Documents\testing\clean\clean" + name)

2 个答案:

答案 0 :(得分:1)

import pandas as pd

exhibit_company = [i.strip('\n')[:-4] for names in \
                  open('filenames.txt','r').readlines()]

for company in exhibit_company:
    vendors = pd.read_excel(company, header = 5, skiprows =0-4)
    vendors.insert(0,'Vendor Name',(company))
    vendors.to_excel('/Users/michaelheitz/Desktop/Work 
                     Stuff/Data/clean'+company+'.xls')

说明:

open('filenames.txt', 'r').readlines() 
['james.xls\n', 'nancy.xls\n', 'temitope.xls\n', 'bianca.xls\n']

要删除\ n,我们使用strip(' \ n')。

for name in names:
        name.strip('\n')
    james.xls
    nancy.xls
    temitope.xls
    bianca.xls

要删除.xls,我们使用[:-4],因为len(.xls)= 4,使用负方法 切片后4个字符,从后面算起。

    for name in names:
            name[:-4]
        james
        nancy
        temitope
        bianca

有关readlines()的更多信息,请参阅https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects

有关发电机的更多信息,请参阅 https://docs.python.org/3.6/tutorial/datastructures.html#list-comprehensions

无需将值循环到数据框中。让我们回到名单列表,

list_of_names = [name1,name2,name3]

df = pd.DataFrame(list_of_names,columns={'company_names'})

答案 1 :(得分:0)

再次感谢你的帮助......令人惊讶的是,晚安和一些咖啡会为你的心态做些什么。我今天早上意识到我做得太多了。我只需要一个列表,而不是两个 - 来迭代。 ;)我将在上面发布我的最终代码 - 我仍然需要解决的唯一问题是它插入索引#' s的前导列,但这应该是一个简单的修复 - 至少我可以尽管通过86 excel文件!