有没有更有效的方法将10,000个excel行加载到python中?

时间:2014-07-15 03:20:16

标签: python excel module performance

我正在从excel加载数据以填充对象,即教师(lastName,firstName,user_ID)。然后将这些教师对象放入列表中,进行进一步的操作和分析(即查找匹配和其他模式)。我这样做的方法是使用xlrd模块从excel加载数据。

for row in range(11) :
    lastName = sheet1.cell_value(row,3)
    firstName = sheet1.cell_value(row,1)
    userID = sheet1.cell_value(row,0)
    profList.append(tempProf)

所以这个方法让我的计算机只需要20秒即可完成12行,我需要这样做10,000个。我的问题是,是否有另一种方式以更有效的方式加载这样的数据?我愿意接受范围界定,所以如果这个问题听起来很愚蠢,我很乐意听取其他选择,谢谢

3 个答案:

答案 0 :(得分:5)

另一种方法是将Excel电子表格转换为CSV格式。

然后使用标准库中的Python csv模块。

from csv import reader as csv_reader

with open("data.csv", "r") as fd:
    for row in csv_reader(fd):
        userid, firstname, lastname = row

<强>解释

  1. csv.reader对象导入为csv_reader我的个人约定)。
  2. 使用上下文管理器和Python的内置with,打开data.csv阅读"r",将生成的文件对象放入fd
  3. 现在迭代由csv_reader(file_object)提供给我们的CSV库处理提供的数据行。
  4. 假设每一行的格式为userid, firstname, lastname,因此我们可以将列表row解压缩到参考/变量中。请参阅:Tuples and Sequences
  5. 另请注意:如果您的数据包含Unicode字符,则需要安装并使用unicodecsv中的Python Package Index第三方库(的PyPI )。

答案 1 :(得分:1)

您可以使用pandas直接从Excel加载数据到pandas DataFrame

import pandas as pd

df = pd.read_excel('filename')

然后您可以使用pandas进行快速操作和分析。

最后,您可以将其保存为Excel,CSV,JSON,HTML,LaTeX,甚至可以直接保存在数据库中。

所以也许你不需要一些&#34;老师对象&#34;。

pandas - Python Data Analysis Library
Pandas Cookbook
Pandas Lessons

答案 2 :(得分:0)

XLRD提供了一个行(行#)方法,可以节省2次返回文件。

for row in range(11) :
    userID, firstName, junk, lastName = sheet1.row_values(row, 0, 3)

文档在这里: https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html?p=4966#sheet.Sheet.row_values-method

在大多数情况下,您希望在单元格上使用行,从数据集中取出切片并使用它更有效,然后每次返回数据集。

10000行是相当多的,所以加载它需要一段时间。您可能需要考虑XML或JSON等通常在其库中具有高效搜索方法的格式,或者像SQLite这样的平面数据库引擎。

一旦你击中了大约一千行左右,通常最好转向程序员友好格式或数据库,因为这些都是为了提高效率。

*我猜测从上面的代码中有4列,第三列被忽略,因此是垃圾变量。