2016-06-08 34 views
1

我有一个文件夹与一些文件。我想导入工作表'sheet1'作为每个人的熊猫数据框,分配给该部分标题的名称。我如何可以自动大熊猫dataframes的创作,从.xls的一个文件夹,变量名的名单?

我已经成功地得到了一个文件名列表:

path = "/Users/path" 
files = os.listdir(path) 
files_xls = [f for f in files if f[-3:] == 'xls'] 

['A.xls', 'B.xls']

而且我已经成功地进行,我想作为数据框名的名单:

names = map(lambda each:each.strip(".xls"), files_xls) 

['A', 'B']

但我没有在使用这些名称导入。我可以手动执行:

A = pd.read_excel(A.xls, 'sheet1') 
B = pd.read_excel(B.xls, 'sheet1') 
etc... 

但我不知道如何自动执行此过程。

+0

我建议你只使用一个字典来做到这一点,定义按键为您的字符串名称和值作为DFS – EdChum

回答

1

使用.zip结合你的两个listsdict,迭代使用.items()结果,并在dict收集pd.read_excel()

df = {} 
for name, f in dict(zip(names, files_xls)).items(): 
    df[name] = pd.read_excel(f, 'sheet1') 

df['A']然后将包含pd.read_excel('A.xls')结果。

你可以简化创建名称的list使用:

names = [f[:-4] for f in files_xls] 

这种工作方式如下:

files_xls = ['A.xls', 'B.xls'] 

names = [f[:-4] for f in files_xls] 
['A', 'B'] 

name_dict = dict(zip(names, files_xls)) 
{'A': 'A.xls', 'B': 'B.xls'} 

for name, f in name_dict.items(): 
    print(name, f) 

打印:

A A.xls 
B B.xls 
+0

我不太清楚这是什么做的/在那里没有办成什么,我希望对,但我发现,当我然后只运行“B”的错误: NameError:名字“B”没有定义 – user1318135

+0

见更新的例子来说明发生了什么。 – Stefan

+0

所以这里的目标是到“A”产生的A.xls – user1318135

-1

有迹象表明,假设下面两个选项为您提供:

1.

for name in names: 
    xlsx[name] = pd.ExcelFile('PATH\' + name + '.xlsx') 
    sheets[name] = xlsx.parse(0) 

2.

for name in names:  
    xlsx[name] = pd.read_excel(open('PATH\' + name + '.xlsx','rb'), sheetname='Sheet1') 

注意XLSX和片材是字典。

+0

试图执行#2,我得到:TypeError:列表索引必须是整数,而不是str – user1318135

+0

xlsx是一个字典: xlsx = dict()和** not ** xlsx = [] –

相关问题