用numpy翻译网格化的csv文件

时间:2012-10-22 15:08:18

标签: python parsing numpy

我需要将一些气象数据输入MySQL数据库。 文件inputFile.csv是逗号分隔的值列表。每行有241行和481个值。 每条线都映射到某个纬度,每条线在线内的位置都映射到一定的经度。

另外两个文件具有相同的结构,lat.csvlon.csv。这些文件包含inputFile.csv中的值映射到的坐标。

为了找到inputFile.csv中值的纬度和经度,我们需要引用lat.csv和{{1}中相同行/位置(或行/列)的值}

我想使用lon.csvinputFile.csv翻译lat.csv,以便我的输出文件包含列表(来自lon.csv), 纬度经度

这是一个小视觉示例:

inputFile.csv

在python / numpy中执行此操作的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

我想,既然您知道所需数组的总大小,就可以预先分配它:

a = np.empty((241*481,3))

现在您可以添加数据:

for i,fname in enumerate(('inputFile.csv','lat.csv','lon.csv')):
    with open(fname) as f:
        data = np.fromfile(f,sep=',')
        a[:,i] = data.ravel()

如果你不知道前面的元素数量,你可以生成一个2-d列表(np.ndarrays列表):

alist = []
for fname in ('inputFile.csv','lat.csv','lon.csv'):
    with open(fname) as f:
        data = np.fromfile(f,sep=',')
        alist.append( data.ravel() )
a = np.array(alist).T

答案 1 :(得分:2)

仅限于numpy功能:

import numpy as np

inputFile = np.gentfromtxt('inputFile.csv',delimiter = ',')
inputFile.reshape(-1)
lat = np.gentfromtxt('lat.csv',delimiter = ',')
lat.reshape(-1)
lon = np.gentfromtxt('lon.csv',delimiter = ',')
lon.reshape(-1)

output = np.vstack( (inputFile,lat,lon) )