1
我有一個propitiatory cursor(arcpy.da.SearchCursor)對象,我需要加載到一個熊貓數據框中。熊貓 - 使用read_csv從發生器對象創建數據框
它實現了next(),reset(),就像您對Python中的生成器對象所期望的那樣。
使用另一篇文章stackexchange,這很出色,我創建了一個類,使得生成器像一個文件類對象一樣工作。這適用於未設置chunksize的默認情況,但是當我爲每個數據幀設置塊大小時,會崩潰python。
我的猜測是n = 0需要實現,所以返回了x行,但到目前爲止這是錯誤的。
實現我的類的正確方法是什麼,所以我可以使用生成器來加載數據框?我需要使用chunksize,因爲我的數據集很大。
因此,僞代碼將是:
customfileobject = Reader(cursor)
dfs = pd.read_csv(customfileobject, columns=cursor.fields,
chunksize=10000)
我使用熊貓版本0.16.1和Python 2.7.10。
Class下:
class Reader(object):
"""allows a cursor object to be read like a filebuffer"""
def __init__(self, fc=None, columns="*", cursor=None):
if cursor or fc:
if fc:
self.g = arcpy.da.SearchCursor(fc, columns)
else:
self.g = cursor
else:
raise ValueError("You must provide a da.SearchCursor or table path and column names")
def read(self, n=0):
try:
vals = []
if n == 0:
return next(self.g)
else:
# return multiple rows?
for x in range(n):
try:
vals.append(self.g.next())
except StopIteration:
return ''
except StopIteration:
return ''
def reset(self):
self.g.reset()
如果您實現'read(self)'一次只讀取一個條目,它會起作用嗎? – ptrj
我假設你的意思是'pd.read_csv':'pd.from_csv'不承認'chunksize'參數。 –
@ptrj - 導致python.exe崩潰。 –