如何从.xls文件夹中自动创建Pandas数据帧,并使用变量名称列表?

时间:2016-06-08 14:32:52

标签: python excel pandas dataframe

我有一个包含许多文件的文件夹。我想将工作表'sheet1'导入为每个工作表的pandas数据帧,并分配给该标题的一部分名称。

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

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...

但我无法弄清楚如何自动化这个过程。

2 个答案:

答案 0 :(得分:1)

使用.zip将您的两个lists合并为dict,使用.items()对结果进行迭代,并在pd.read_excel()中收集dict

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

答案 1 :(得分:-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和工作表是字典。