我有一个包含3k图纸的Excel文件。我目前正在一页一页地阅读工作表,转换为数据框,追加到列表中并重复。 for循环中的迭代持续大约90秒,这是大量的时间。每张纸有大约35行数据和5列。
有人可以建议一种更好的方法来解决这个问题吗?
这是我的代码:
import pandas as pd
import time
nr_pages_workbook = list(range(1,3839))
nr_pages_workbook = ['Page '+str(x) for x in nr_pages_workbook]
list_df = []
start = time.time()
for number in nr_pages_workbook:
data = pd.read_excel('D:\\DEV\\Stage\\Project\\Extras.xlsx',sheet_name=number)
list_df.append(data)
break
stop = time.time() - start
Df_Date_Raw = pd.concat(list_df)
答案 0 :(得分:2)
您可以尝试将nr_pages_workbook
直接传递给sheet_name
中的read_excel
参数,根据docs可以是一个列表,返回值将是数据框。这样,您可以避免在每个周期中打开和读取文件的开销。
或者只是简单地省略该参数,然后将所有工作表读入dict,然后从dict进行连接:
data = pd.read_excel('D:\\DEV\\Stage\\Project\\Extras.xlsx')
df = pd.concat([v for k,v in data.items()])
答案 1 :(得分:2)
每当遍历循环时,您将再次读取整个文件。我建议使用ExcelFile读取一次,然后在循环中访问特定的工作表。试试:
import pandas as pd
xl = pd.ExcelFile('foo.xls')
sheet_list = xl.sheet_names
for i in sheet_list:
if i ==0:
df = xl.parse(i)
else:
df = df.append(xl.parse(i), ignore_index=True)