2017-08-04 86 views
0

我有许多数据集,所有数据集的形状分别为(586, 1383),分别代表经度和纬度。数据集用于土壤湿度数据;例如,print(dataset1[2, 435])会给我一个值0.354为多个数据集创建一个numpy数组

目前,我有31个这些数据集。我想创建一个形状为(31, 586, 1383)的numpy数组来保存所有这些数据集。目前,我可以打开所有我想添加到一个数组,像这样的数据集:

directory = r"C:\Users\matth\Downloads\AMSRE" 
for root, dirs, filenames in os.walk(directory): 
    for f in filenames: 
     if f.startswith("AMSR_E_L3_DailyLand_V06_201001"): 
     log = open(os.path.join(root, f), 'r') 
     file_name = (("C:\\Users\\matth\\Downloads\\AMSRE\\") + f) 
     hdf = SD(file_name, SDC.READ) 
     g = gdal.Open(('HDF4_EOS:EOS_GRID:') + file_name + (':Ascending_Land_Grid:A_Soil_Moisture')) 
     sm = g.ReadAsArray() 

     lons = np.fromstring (urllib2.urlopen("ftp://sidads.colorado.edu/pub/tools/easegrid/lowres_latlon/MLLONLSB").read(), \ 
     dtype=np.int32)/100000. 
     lats = np.fromstring (urllib2.urlopen("ftp://sidads.colorado.edu/pub/tools/easegrid/lowres_latlon/MLLATLSB").read(), \ 
     dtype=np.int32)/100000. 

     lons = lons.reshape(sm.shape) 
     lats = lats.reshape(sm.shape) 
     smm = np.ma.array (sm, mask=np.logical_or (sm==-9999, sm==9999)) 

最后,print(smm.shape)给我(586, 1383)。上面的代码只是根据经度和纬度获取数据。我正在考虑可能使用for循环将文件连续添加到一个空数组中...不知道这将如何工作。有谁知道我可以如何处理这个代码,或者改变它,所以我可以将数据集添加到形状为(31, 586, 1383)的数组中?

+0

为什么不只是'pd.DataFrame(smm)'? –

+0

@cᴏʟᴅsᴘᴇᴇᴅ数据帧的大小仍然是'(586,1383)' –

+0

啊..没有看到这一点。不确定熊猫如何支持3D数据帧。 –

回答

0

正如pandas documentation所述,DataFrame是2D结构。

DataFrame是一个带有可能不同类型列的二维标签数据结构。您可以将它想象为电子表格或SQL表格或Series对象的字典。

但是,您可以在同一个数据框中包含一个数据框或所有数据的列表,并在其中添加一个指示原点的列。