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

2024-03-29 07:39:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从excel加载数据以填充对象,即教师(姓、名、用户号)。然后将这些教师对象放入一个列表中,在该列表中进行进一步的操作和分析(即查找匹配项和其他模式)。我的方法是使用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行,我需要花费10000行。我的问题是,有没有其他方法可以更有效地加载这样的数据?我对范围的界定持开放态度,所以如果这个问题听起来很愚蠢,我很乐意听到其他选择,谢谢


Tags: 模块数据对象方法用户列表forvalue
3条回答

您可以使用pandas将数据直接从excel加载到pandasDataFrame

import pandas as pd

df = pd.read_excel('filename')

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

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

所以也许你不需要一些“教师对象”。在

pandas - Python Data Analysis Library
Pandas Cookbook
Pandas Lessons

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

然后使用标准库中的Pythoncsv模块。在

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",将生成的file对象放入fd。在
  3. 现在迭代由CSV库处理提供的数据行,csv_reader(file_object)提供给我们。在
  4. {cd7>我们可以把Tuples and Sequences

另请注意:如果您的数据包含Unicode字符,您将希望安装并使用Python Package IndexPyPi)中的unicodecsv第三方库。在

XLRD向提供了一个row(row#)方法,该方法应该可以节省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列,第三列被忽略,因此产生了垃圾变量。在

相关问题 更多 >