2017-04-05 66 views
0

我正在嘗試迭代大型數字高程模型(DEM),並使用Python以4000的增量創建新文本文件。以下是逐行遍歷文件的代碼,但我想增加寫入新文件的行數。任何幫助將不勝感激。使用Python對大DEM進行迭代

import pandas as pd 
import numpy as np 

#Read in File 
df1 = pd.read_table('Large_DEM_File.txt', skiprows=6, chunksize=500) 

df = pd.concat(df1) 
rows = 320000 
y= -1003.00 
delta = 0.00025 
linecount= 4001 

#initialize counter 
i = 0 
while i <= rows: 
    for i, row in df.iterrows(): 
     filename = open(str(i)+'.txt','w') 
     filename.write("ncols 136000\nrows 320000\nxllcorner 122\n") 
     filename.write("yllcorner %.5f" %(y+rows*delta-(i+1)*delta)) 
     filename.write("\ncellsize 0.00025\nNODATA_value -9999\n") 
     filename.write(row[0:4000+i]) 
     i += 4000 

回答

0

我沒有你的數據,有點困惑你想要做什麼,但這是否得到你想要的?

rows = 320000 
y= -1003.00 
delta = 0.00025 

df_chunk_reader = pd.read_table('Large_DEM_File.txt', skiprows=6, chunksize=500) 

for i,chunk in enumerate(df_chunk_reader): 

    filename = open(str(i)+'.txt','wb') 
    filename.write("ncols 136000\nrows 320000\nxllcorner 122\n") 
    filename.write("yllcorner %.5f" %(y+rows*delta-(i+1)*delta)) 
    filename.write("\ncellsize 0.00025\nNODATA_value -9999\n") 
    filename.write(chunk) 

在這裏看到更多關於處理dataframes由大塊: http://pandas.pydata.org/pandas-docs/stable/io.html#iterating-through-files-chunk-by-chunk

+0

枚舉是一個偉大的功能,但它並不總是與大數據工作。我的最終目標是在不存儲數據的情況下迭代大數據(ascii DEM),並將大數據分割爲更易消化的內存以供進一步計算。我聽說xrange是一種可能的方式,但我沒有太多的使用該功能的經驗。 – FlyTheW

+0

我上面的代碼和你的代碼之間的主要區別是不枚舉,它是通過塊處理。我的代碼中的df_chunk_reader是一個生成器(如xrange),但一次會產生一大塊數據集。這樣,您可以按大塊處理數據。塊的大小可以是任何你想要的,由chunksize參數決定。 –

+0

在你的問題代碼中,你也有df1這是一個發生器,它一次產生你的數據集塊。但不是按塊來處理塊,而是將所有塊連接在一起,然後逐行處理它。如果我正確理解你的問題,你應該像在上面的答案代碼中一樣按塊進行處理。 –