我有一个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)
我知道这很古老,但万一其他人正在寻找一个不涉及VB的答案。Pandasread\u csv()
速度更快,但您不需要VB脚本来获取csv文件。
打开Excel文件并另存为*。csv(逗号分隔值)格式。
在“工具”下,您可以选择“Web选项”,在“编码”选项卡下,您可以将编码更改为适用于数据的任何编码。我最终使用了西欧的Windows,因为Windows UTF编码是“特殊的”,但有很多方法可以实现同样的目的。然后使用pd中的编码参数。读取\u csv()
以指定编码。
这里列出了编码选项
如果您(每页)的行数少于65536行,您可以尝试xls
(而不是xlsx
。根据我的经验,xls
比xlsx
快。很难与csv
进行比较,因为它取决于页数。
虽然这不是一个理想的解决方案(xls
是一种二进制旧的私有格式),但我发现,如果您使用的是大量工作表、具有经常更新的值的内部公式,或者出于任何原因,您确实希望保留excel多工作表功能(而不是csv分隔的文件),则此方法非常有用。
正如其他人所建议的那样,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,因此如果我需要那里的任何文件,都可以使用它们。它已安装在我的盒子上,但尚未安装,也无法安装在我的共享