我想加載一個使用熊貓的128MB文件(谷歌搜索後,我發現它比打開或np.loadtxt快)。該文件有1000行,每行包含由單個空格分隔的0或1的65K值。蟒蛇熊貓read_csv永恆
由於某些原因,它需要很長的時間,我不知道爲什麼。 128MB對我來說聽起來相當小,而Matlab在大約一分鐘內加載它。
這裏是我的(簡單)的代碼:
import os
import numpy as np
import pandas as pd
import time
DATA_DIR='D:\BinaryDescriptors3\ORBLearningIntermediatResults2'
TEST_DIR='yosemite_harris'
OUT_DIR='D:\BinaryDescriptors3\ORBLearningTripletsFinalResults'
PATCH_NUM=1000
data_filename=TEST_DIR+'_' + str(PATCH_NUM) + '_ORBresfile.txt'
data_filepath = os.path.join(DATA_DIR,data_filename)
s=time.time()
print "START"
data = pd.read_csv(data_filepath,delimiter=' ')
e=time.time()
print e-s
它從來沒有達到過的最後一行(我把它結束前30分鐘)。爲什麼讀一個小的128MB文件需要這麼長時間?
編輯:
當試圖使用下面的命令來讀取只有一行:
數據= pd.read_csv(data_filepath,分隔符=」」,NROWS = 1)
我得到以下錯誤:
Traceback (most recent call last):
File "C:\eclipse\plugins\org.python.pydev_3.7.1.201409021729\pysrc\pydevd.py", line 2090, in <module>
debugger.run(setup['file'], None, None)
File "C:\eclipse\plugins\org.python.pydev_3.7.1.201409021729\pysrc\pydevd.py", line 1547, in run
pydev_imports.execfile(file, globals, locals) # execute the script
File "D:\BinaryDescriptors3\Python\LearnTripletsOrb\LearnTripletsOrb.py", line 18, in <module>
data = pd.read_csv(data_filepath,delimiter=' ', nrows=1)
File "C:\Users\GilLevi\Anaconda\lib\site-packages\pandas\io\parsers.py", line 443, in parser_f
return _read(filepath_or_buffer, kwds)
File "C:\Users\GilLevi\Anaconda\lib\site-packages\pandas\io\parsers.py", line 231, in _read
return parser.read(nrows)
File "C:\Users\GilLevi\Anaconda\lib\site-packages\pandas\io\parsers.py", line 686, in read
ret = self._engine.read(nrows)
File "C:\Users\GilLevi\Anaconda\lib\site-packages\pandas\io\parsers.py", line 1130, in read
data = self._reader.read(nrows)
File "parser.pyx", line 727, in pandas.parser.TextReader.read (pandas\parser.c:7146)
File "parser.pyx", line 774, in pandas.parser.TextReader._read_low_memory (pandas\parser.c:7707)
StopIteration
當試圖讀取包含的65K字符只有一行類似的文件,我也得到了以下錯誤:
回溯(最近通話最後一個): 文件「 C:\ eclipse \ plugins \ org.python.pydev_3.7.1.201409021729 \ pysrc \ pydevd.py「,第2090行,在 debugger.run(setup ['file'],None,None) 文件」C:\ eclipse \ plugins \ org.python.pydev_3.7.1.201409021729 \ pysrc \ pydevd.py「,行1547,運行中 pydev_imports.execfile(文件,全局變量,本地文件)#執行腳本 文件」D:\ BinaryDescriptors3 \ Python \ LearnTripletsOrb \ LearnTripletsOrb.py「,第20行,在 data = pd.read_csv(data_filepath,delimiter ='', NROWS = 1) 文件 「C:\用戶\ GilLevi \阿納康達\ lib中\站點包\大熊貓\ IO \ parsers.py」,線路443,在parser_f 返回_read(filepath_or_buffer,kwds)
文件「 C:\ Users \ GilLevi \ Anaconda \ lib \ site-packages \ pandas \ io \ parsers.py「,第231行,在_read return parser.read(nrows) 文件」C:\ Users \ GilLevi \ Anaconda \ lib \ site-packages \ pandas \ io \ parsers.py「,第686行,在讀 ret = self._engine.read(nrows) 文件」C:\ Users \ GilLevi \ Anaconda \ lib \ site-packages \ pandas \ iO \ parsers.py「,第1130行,在讀 data = self._reader.read(nrows) pandas.parser.TextReader.read(pandas \ parser.c:7146)中的文件」parser.pyx「,第727行) 文件 「parser.pyx」,線路774,在pandas.parser.TextReader._read_low_memory(熊貓\ parser.c:7707) 的StopIteration
我也試圖生成包含2線65K類似的文件,但使用「,」作爲分隔符,並得到與1和2中相同的錯誤。
如果load_csv不是正確的方法,請您推薦一個合適的替代方法嗎?
你有沒有試過在一個較小的文件,說只是1號線? – 2014-09-12 19:12:27
根據你想要對數據做什麼,你可以嘗試另一種方法;您描述的格式聽起來不像典型的CSV。 – 2014-09-12 19:16:02
閱讀單行需要多長時間? :'data = pd.read_csv(data_filepath,delimiter ='',nrows = 1)' – EdChum 2014-09-12 20:21:07