从每日降水CSV文件中剪切选定的数据

时间:2016-01-25 20:04:09

标签: python csv

我有一个csv文件包含每日降水量(每天253行和191列)所以一年我有191 * 365列。 我想提取第一天感兴趣的区域row 20column 40的特定行和列的数据,2,3,4 ... 365 days列之间的距离相同。 我是python中的新手,有什么方法可以提取数据并将其存储在某个行和列的新csv中一年? 感谢

3 个答案:

答案 0 :(得分:0)

要从某个行和列获取值,您可以尝试使用这样的smth:

func controllerWillChangeContent(controller: NSFetchedResultsController) {
    myTableView?.beginUpdates()
}


func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
    switch(type) {
        case .Insert:
            self.myTableView?.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Fade)
        case .Delete:
            self.myTableView?.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade)
        case .Update:  
           self.configureCell((myTableView?.cellForRowAtIndexPath(indexPath!)), atIndexPath: indexPath!)
        case .Move:
                myTableView?.deleteRowsAtIndexPaths([indexPath!], withRowAnimation: .Fade)
                myTableView?.insertRowsAtIndexPaths([newIndexPath!], withRowAnimation: .Fade)
    }
}

func configureCell(cell: UITableViewCell?,
    atIndexPath indexPath: NSIndexPath) {
    //YOUR CELL UPDATE CODE
}

func controllerDidChangeContent(controller: NSFetchedResultsController) {
    myTableView?.endUpdates()
} 

答案 1 :(得分:0)

除了提取数据外,您首先需要做的是重新排列数据

现在,每天都会添加191个。要做到这一点,需要解析整个文件(可能在内存中,每天都在增长数据),数据被添加到每行的末尾,所有内容都必须再次完全写入磁盘。

通常,要将数据添加到csv,会在文件末尾添加行。无需每次都解析和重写整个文件。

最重要的是,当列数越来越高时,大多数读取csv文件的软件都会出现问题。

因此,将每日数据添加为csv文件末尾的行会更好。

虽然我们正在考虑:假设253 x 191是某种网格,或者至少每个单元具有相同的数据类型,这将是二进制存储的理想选择(不是确定Python如何处理它。)

所有数据都可以以二进制形式存储,从而产生固定长度的字段/单元格。要访问字段,可以简单地计算它的位置,并且不需要每次都解析和转换所有数据。检索数据几乎是即时的。

答案 2 :(得分:0)

我已经设法在阅读了一些示例并尝试使用此脚本进行剪切

`import netCDF4 as nc
pixel = [[1,36,77],[2,37,77],[3,35,78],[4,36,78],[5,37,78],[6,38,78],[7,39,78],[8,40,78],[9,35,79],[10,36,79],[11,37,79],[12,38,79],[13,39,79],[14,40,79],[15,35,80],[16,36,80],[17,37,80],[18,38,80],[19,35,81],[20,36,81],[21,37,81],[22,36,82]]
print pixel
from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir('D:\RCP45\Hujan_Harian') if isfile(join('D:\RCP45\Hujan_Harian',f))]
print onlyfiles
folder = 'D:\RCP45\Hujan_Harian\\'
fout = open ("D:\My Documents\precipitation.txt", "w")
for j in range (0,len(onlyfiles)): 
    filename = onlyfiles[j]
    print filename
    tahun = filename[0:4]
    print tahun
    from scipy.io import netcdf
    f1 = netcdf.netcdf_file(folder+filename,'r')
    print (f1.variables)
    jlh_hari = int(len(f1.variables['time_bnds'][:]))
    print jlh_hari
    output = []
    for h in range (0,(jlh_hari)):
        for i in range (0,22):
            x=pixel[i][1]
            y=pixel[i][2]
            pr=f1.variables['pr'][h,x,y]
            fout.write(str(pixel[i][0]) + ', , ' + str(tahun) + ', ' + str(pr) + '\n')
        fout.write('\n')
    print output`