簡體   English   中英

是否有更快的方法將Excel文件讀取到熊貓數據框

[英]Is there a faster way to read excel files to pandas dataframe

我大約有700個excel文件,需要通過刪除一些標頭和更改某些列名將其轉換為csv文件。 我設法實現了解決方案,但是它很慢。 我發現,使用熊貓讀取Excel到數據框需要花費大量時間,如下所示:

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

我猜有一些UNIX命令可以快速完成此操作。 但是我想用python解決。 還有其他更快的庫嗎? 我也想知道為什么讀取excel文件需要更長的時間,我可以理解如果我們要保留excel的樣式,顏色則需要更長的時間。 但是,就我而言,我所需要的只是將其讀取到數據幀中。

以下是版本號:

  • 的Python:2.7.12
  • 熊貓:0.21.0
  • xlrd:1.0.0

我發現熊貓用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM