Python:加载excel标头而不加载剩余数据

Python:加载excel标头而不加载剩余数据,python,pandas,header,Python,Pandas,Header,我正在处理非常大的Excel文件,用Python加载熊猫需要很长时间。在处理数据之前,用户必须选择许多和数据相关的选项,这些选项只需要每个数据集中每列的名称。用户有时不得不等待几分钟,直到加载数据才能选择必要的选项,然后让程序再进行几分钟的实际处理,这非常不方便 所以,我的问题是:有没有办法用Python从Excel文件中加载数据头?在某种程度上,我认为它是read_excel函数中“skiprows”参数的替代版本,在该函数中,我不想跳过数据开头的行,而是想跳过数据结尾的行。我想强调的是,我的

我正在处理非常大的Excel文件,用Python加载熊猫需要很长时间。在处理数据之前,用户必须选择许多和数据相关的选项,这些选项只需要每个数据集中每列的名称。用户有时不得不等待几分钟,直到加载数据才能选择必要的选项,然后让程序再进行几分钟的实际处理,这非常不方便

所以,我的问题是:有没有办法用Python从Excel文件中加载数据头?在某种程度上,我认为它是read_excel函数中“skiprows”参数的替代版本,在该函数中,我不想跳过数据开头的行,而是想跳过数据结尾的行。我想强调的是,我的目标是减少Python加载文件所需的时间。我也知道有很多方法可以使用csv文件来实现这一点,但不幸的是,这对我没有帮助


谢谢你的帮助

您可以在.xlsx和.csv中使用'skipfooter'参数或'nrows'参数。但是,两者不能同时使用

path = r'c:\users\abc\def\stack.xlsx'
df = pd.read_excel(path, skipfooter = 99999)
这意味着,从页脚到顶部将跳过99999行,并加载页眉中的其余记录

path = r'c:\users\abc\def\stack.xlsx'
df = pd.read_excel(path, nrows= 5)
这意味着,前5行将显示标题


另请参阅此

您可以尝试使用sxl模块()。下面是我为一个大型excel文件(大约75000行)尝试的代码和计时结果:

from datetime import datetime
startTime = datetime.now()
import pandas as pd
import sxl


startTime = datetime.now()
df = pd.read_excel('\\Big_Excel.xlsx')
print("Time taken to load whole data with pandas read excel is {}".format((datetime.now() - startTime)))


startTime = datetime.now()
df = pd.read_excel('\\Big_Excel.xlsx', nrows = 5)
print("Time taken with top 5 rows with pandas read excel is {}".format((datetime.now() - startTime)))


startTime = datetime.now()
wb = sxl.Workbook('\\Big_Excel.xlsx')
ws = wb.sheets[1]
data = ws.head(5)
print("Time taken to load top 5 rows using sxl is {}".format((datetime.now() - startTime)))

Pandas read excel将整个数据加载到内存中,因此在计时方面没有太大差异。以下是以上各项的输出:

  • 使用pandas read excel加载整个数据所用的时间为0:00:49.174538
  • 使用excel读取前5行所用的时间为0:00:44.478523
  • 使用sxl加载前5行所用的时间为0:00:00.671717

我希望这有帮助

尝试
nrows
读取标题的前1-2行。不过,加载数据不会花费很长时间,excel工作簿是否很大?@datanoveler检查我对下面答案的回答。我提到的工作簿非常大,大部分都是100MB+谢谢你的回答,Viknesh!不幸的是,这并没有减少pandas打开文件所需的时间,它只是加载整个数据并返回解析后的数据帧(添加其中一个参数的运行时间略高于加载没有任何附加参数的文件的运行时间)。感谢您的回答,K_Raikar!这正是我所需要的,PyPI页面上的项目描述非常完美。非常感谢你!