当前位置: 首页 > 知识库问答 >
问题:

将Excel文件读取到dataframe的更快方法

单凯捷
2023-03-14

我有一个14MB的Excel文件,其中有五个工作表,我正在将它们读入Pandas数据框中,虽然下面的代码可以工作,但需要9分钟!

有人有加快速度的建议吗?

import pandas as pd

def OTT_read(xl,site_name):
    df = pd.read_excel(xl.io,site_name,skiprows=2,parse_dates=0,index_col=0,
                       usecols=[0,1,2],header=None,
                       names=['date_time','%s_depth'%site_name,'%s_temp'%site_name])
    return df

def make_OTT_df(FILEDIR,OTT_FILE):
    xl = pd.ExcelFile(FILEDIR + OTT_FILE)
    site_names = xl.sheet_names
    df_list = [OTT_read(xl,site_name) for site_name in site_names]
    return site_names,df_list

FILEDIR='c:/downloads/'
OTT_FILE='OTT_Data_All_stations.xlsx'
site_names_OTT,df_list_OTT = make_OTT_df(FILEDIR,OTT_FILE)

共有3个答案

施俊驰
2023-03-14

我知道这很古老,但万一其他人正在寻找一个不涉及VB的答案。Pandasread\u csv()速度更快,但您不需要VB脚本来获取csv文件。

打开Excel文件并另存为*。csv(逗号分隔值)格式。

在“工具”下,您可以选择“Web选项”,在“编码”选项卡下,您可以将编码更改为适用于数据的任何编码。我最终使用了西欧的Windows,因为Windows UTF编码是“特殊的”,但有很多方法可以实现同样的目的。然后使用pd中的编码参数。读取\u csv()以指定编码。

这里列出了编码选项

凌波峻
2023-03-14

如果您(每页)的行数少于65536行,您可以尝试xls(而不是xlsx。根据我的经验,xlsxlsx快。很难与csv进行比较,因为它取决于页数。

虽然这不是一个理想的解决方案(xls是一种二进制旧的私有格式),但我发现,如果您使用的是大量工作表、具有经常更新的值的内部公式,或者出于任何原因,您确实希望保留excel多工作表功能(而不是csv分隔的文件),则此方法非常有用。

刁文光
2023-03-14

正如其他人所建议的那样,csv读取速度更快。因此,如果您在windows上并且有Excel,您可以调用vbcript将Excel转换为csv,然后读取csv。我试了一下下面的脚本,大概花了30秒。

# create a list with sheet numbers you want to process
sheets = map(str,range(1,6))

# convert each sheet to csv and then read it using read_csv
df={}
from subprocess import call
excel='C:\\Users\\rsignell\\OTT_Data_All_stations.xlsx'
for sheet in sheets:
    csv = 'C:\\Users\\rsignell\\test' + sheet + '.csv' 
    call(['cscript.exe', 'C:\\Users\\rsignell\\ExcelToCsv.vbs', excel, csv, sheet])
    df[sheet]=pd.read_csv(csv)

这里有一个Python的小片段来创建ExcelToCsv.vbs脚本:

#write vbscript to file
vbscript="""if WScript.Arguments.Count < 3 Then
    WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file> <worksheet number (starts at 1)>"
    Wscript.Quit
End If

csv_format = 6

Set objFSO = CreateObject("Scripting.FileSystemObject")

src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))
worksheet_number = CInt(WScript.Arguments.Item(2))

Dim oExcel
Set oExcel = CreateObject("Excel.Application")

Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)
oBook.Worksheets(worksheet_number).Activate

oBook.SaveAs dest_file, csv_format

oBook.Close False
oExcel.Quit
""";

f = open('ExcelToCsv.vbs','w')
f.write(vbscript.encode('utf-8'))
f.close()

这个答案得益于在命令行和CSV中将XLS转换为CSV

 类似资料:
  • 本文向大家介绍python读取Excel表格文件的方法,包括了python读取Excel表格文件的方法的使用技巧和注意事项,需要的朋友参考一下 python读取Excel表格文件,例如获取这个文件的数据 python读取Excel表格文件,需要如下步骤: 1、安装Excel读取数据的库-----xlrd 直接pip install xlrd安装xlrd库 2、获取Excel文件的位置并且读取进来

  • 本文向大家介绍Android应用读取Excel文件的方法,包括了Android应用读取Excel文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android应用读取Excel文件的方法。分享给大家供大家参考,具体如下: ReadExcel.java文件: jxl.7z点击此处本站下载。 希望本文所述对大家Android程序设计有所帮助。

  • 我得到了一个CSV文件和一个头文件,它必须通过Spark(2.0.0和Scala2.11.8)作为数据frame读取。 是否有任何方法可以使用spark代码仅从CSV头中转义特殊字符?

  • 找不到很多这个确切用例的例子。基本上,我有两个目录,其中应该包含相同的文件,混合了。xlsx文件和。txt文件。我编写了一系列代码来比较。xlsx文件很好,还可以返回它发现的任何不匹配(行、列)的坐标。 我的代码似乎有一个问题做同样的文本文件,我可以通过excel手动打开这个罚款,这是一个标签分隔的文本文件。 当我尝试将其转换为XSSFWorkbook时,它不喜欢,其中文件excelFile1是我

  • 本文向大家介绍Python导出数据到Excel可读取的CSV文件的方法,包括了Python导出数据到Excel可读取的CSV文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python导出数据到Excel可读取的CSV文件的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Python程序设计有所帮助。

  • 问题内容: 我正在尝试读取Excel文件(Office 2003)。有一个Excel文件需要上载并对其内容进行解析。 通过Google,我只能找到以下相关(且主题不足)的答案:生成Excel文件,读取Excel XML文件,读取Excel CSV文件或不完整的废弃项目。我拥有Office 2003,因此如果我需要那里的任何文件,都可以使用它们。它已安装在我的盒子上,但尚未安装,也无法安装在我的共享