반응형
누구든지 속도를 높이기위한 제안이 있습니까?
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)
해결 방법
다른 사람들이 제안했듯이 csv 읽기가 더 빠릅니다. 따라서 Windows에 있고 Excel이있는 경우 vbscript를 호출하여 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)
다음은 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()
참조 페이지 https://stackoverflow.com/questions/28766133
반응형
'파이썬' 카테고리의 다른 글
파이썬 Python 오류 : 파일 "<stdin>" (0) | 2020.11.29 |
---|---|
파이썬 pandas loc 대 iloc 대 ix 대 at 대 iat? (0) | 2020.11.29 |
파이썬 두 개의 Pandas 데이터 프레임을 동일한 인덱스로 결합 (0) | 2020.11.29 |
파이썬 정수를 로마 숫자로 변환하는 기본 프로그램? (0) | 2020.11.29 |
파이썬 키 / 값이 JSON에 있는지 확인 (0) | 2020.11.29 |
댓글