我有一个包含许多文件的文件夹。我想将工作表'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...
但我无法弄清楚如何自动化这个过程。
答案 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和工作表是字典。