gpt4 book ai didi

python - 有没有更快的方法将 excel 文件读取到 pandas 数据框

转载 作者:行者123 更新时间:2023-12-04 19:49:52 24 4
gpt4 key购买 nike

我有大约 700 个 excel 文件需要通过删除一些标题和更改一些列名称将其转换为 csv 文件。我已经设法实现了该解决方案,但速度很慢。我发现使用 pandas 将 excel 读取到数据框需要花费大量时间,如下所示:

df = pd.read_excel(file_path, skiprows=self.skip_rows)

我想有一些 unix 命令可以快速完成这个操作。但是我想要一个 python 中的解决方案。还有其他更快的库吗?另外我想知道为什么读取 excel 文件需要更长的时间,我可以理解如果我们想保留 excel 中的样式和颜色应该需要更长的时间。但是,就我而言,我只需要将其读入数据框即可。

以下是版本号:

  • python :2.7.12
  • Pandas :0.21.0
  • xlrd: 1.0.0

最佳答案

我发现 pandas 在 python 中读取大型 excel 工作簿时速度很慢。 Openpylx 也可能很慢,但如果您只对从 excel 工作表中获取值感兴趣,那么有一种方法可以快得多。

  1. 使用 openpyxl 以只读方式打开工作簿
  2. 获取所需的工作表
  3. 使用 worksheet.values 迭代器,使用 islice 仅提取您想要的范围。您可以为列 ID 传入列号或字符串

这些函数将非常快速地返回您指定的值范围。

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)

关于python - 有没有更快的方法将 excel 文件读取到 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48075311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com