我有大约700个excel文件,需要通过删除一些标题并更改一些列名来转换为csv文件。我设法实现了解决方案,但速度很慢。我发现使用pandas读取excel到数据帧需要花费大量时间,如下所示:
df = pd.read_excel(file_path, skiprows=self.skip_rows)
我猜有一些unix命令可以快速完成此操作。不过我想在python中找到解决方案。还有其他更快的库吗?另外我想知道为什么读取excel文件需要更长的时间,我可以理解,如果我们想要保留样式,excel的颜色应该花费更长时间。但是在我的情况下,我只需要将其读入数据帧。
以下是版本号:
答案 0 :(得分:0)
我发现熊猫用python读取大型excel工作簿很慢。 Openpylx也可能很慢,但是如果您只想从excel工作表中获取值,那么有一种方法可以使速度显着提高。
这些函数将很快返回您指定的值范围。
from openpyxl import load_workbook
from copy import copy,deepcopy
from itertools import islice
import string
def col2num(col):
num = 0
for c in col:
if c in string.ascii_letters:
num = num * 26 + (ord(c.upper()) - ord('A')) + 1
return num
def get_worksheet_range(ws, r_start=1,c_start=1,r_end=-1,c_end=-1):
if isinstance(c_start,int)==False:
c_start=col2num(c_start)
if isinstance(c_end,int)==False:
c_end=col2num(c_end)
if r_end<=0: r_end=ws.max_row
if c_end<=0: c_end=ws.max_row
outrange=[x[:] for x in [[None] * (c_end-c_start+1)] * (r_end-r_start+1)]
i=0
for row in islice(ws.values,r_start-1,r_end):
j=0
for value in islice(row,c_start-1,c_end-1):
outrange[i][j]=value;j=j+1
i=i+1
return outrange
wb=load_workbook(filename=r"c:\some_excel_file.xlsx",read_only=True)
ws=wb['SomeWorkSheet']
datarange=get_worksheet_range(ws)