我有一个熊猫数据框df
,看起来像这样
df = {'Regions': {0: 'REGION1', 1: 'REGION2'}, 'x': {0: '1249-43,1269-12,1280-12', 1: '1267-12,1269-12,1280-12'}}
以及名为rasters
的光栅文件列表
rasters = 'SI_1206-33_50cm.tif', 'SI_1249-43_50cm.tif', 'SI_1269-12_50cm.tif', 'SI_1267-12_50cm.tif', 'SI_3865-17_50cm.tif'
我想做的是创建一个rasters
中所有与每个区域的df.x
中的字符串匹配的所有条目的新列表。
for index, row in df.iterrows():
region = row['Regions']
tiffs = row['x']
rasterlist = []
for raster in rasters:
if raster in tiffs:
rasterlist = rasterlist.append(raster)
print(rasterlist)
因此,在栅格上进行迭代时,我试图为REGION1的第一次迭代获取一个包含rasterlist
和'SI_1249-43_50cm.tif'
的{{1}},对于第二次迭代获取一个{{1} }仅包含'SI_1269-12_50cm.tif'
的REGION2。我想使用rasterlist
中的'SI_1267-12_50cm.tif'
功能将列表rasterlist
用作进一步处理的输入。
此代码似乎不起作用的是模式匹配,每次迭代我得到一个空的MosaicToNewRaster_management
变量。我认为是这种情况,因为df.x中的不同列表项之间用逗号隔开,并且arcpy
函数似乎不起作用。这是我遇到的困扰,希望能得到一些输入。
答案 0 :(得分:2)
您检查的方向错误。您正在使用
if raster in tiffs
但是tiffs
就像'1249-43,1269-12,1280-12'
一样,显然没有任何栅格在其中。您需要拆分tiff列表,然后反向检查是否有tiff。在栅格中。
tiffs = row['x'].split(',')
raster_list = []
for raster in rasters:
for tiff in tiffs:
if tiff in raster:
raster_list.append(raster)
# Assuming each tiff matches with only one raster
# you can break to save some time here.
break
print(raster_list)
如果您可以告诉我们更多有关栅格和tiff之间的映射的信息,那么可以使用dict
或set
来完成某些事情。