我有一个似乎是一个简单的任务 - 我差不多完成了,但有一个麻烦的问题我应该能够摆脱,但这是难以捉摸的。
我有许多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)
答案 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文件!