Python 循环遍历列并避免索引器

Python 循环遍历列并避免索引器,python,pandas,geopandas,Python,Pandas,Geopandas,给定样本数据集(实际数据具有(931674)): 我正在跑步: pd_out = pd.DataFrame({'zone': [], 'number': []}) for col_num in range(0, len(border.columns), 2): curr_lon_name = border.columns[col_num] curr_lat_name = border.columns[col_num + 1] # PROBLEM IS HERE num

给定样本数据集(实际数据具有
(931674)
):

我正在跑步:

pd_out = pd.DataFrame({'zone': [], 'number': []})

for col_num in range(0, len(border.columns), 2):
    curr_lon_name = border.columns[col_num]
    curr_lat_name = border.columns[col_num + 1] # PROBLEM IS HERE
    num = curr_lon_name.split("_")[-1]
    border = border[[curr_lon_name, curr_lat_name]].dropna()
    border[curr_lon_name] = border[curr_lon_name].replace(r'[()]', '', regex=True)
    border[curr_lat_name] = border[curr_lat_name].replace(r'[()]', '', regex=True)
    border[curr_lon_name] = pd.to_numeric(border[curr_lon_name], errors='coerce')
    border[curr_lat_name] = pd.to_numeric(border[curr_lat_name], errors='coerce')
    geometry2 = [Point(xy) for xy in zip(border[curr_lon_name],border[curr_lat_name])]
    border_point = gpd.GeoDataFrame(border,crs=crs,geometry=geometry2)
    turin_final = Polygon([[p.x, p.y] for p in border_point.geometry])
    within_turin = turin_point[turin_point.geometry.within(turin_final)]
    curr_len = len(within_turin)
    pd_out = pd_out.append({'zone': "long_lat_{}".format(num), 'number': curr_len}, ignore_index=True) 

但是在
--->7 curr\u lat\u name=border.columns[col\u num+1]
行中,我得到:

索引器:索引3超出大小为3的轴0的界限


Python从0开始索引。因此,如果轴的大小为3,则只能使用索引0、1和2访问它

len(border.columns)
是(我猜)3。因此,
col_num
将在for循环中取值0和2


当它取值2,然后在有问题的行中执行
border.columns[col_num+1]
时,您试图访问其边界之外的轴,因为
col_num+1
是3。

您能告诉我为什么要在范围(0,len(border.columns),2)中迭代替换列吗为您提供了备用列,看起来您在border中没有第三个索引。columnstry for语句中的这个:for col_num在范围(0,len(border.columns)-1,2)@giulio一些好东西!但输出只有1行,但我需要338行(因为我每2对夫妇就需要338行),因此,我应该怎么做?
pd_out = pd.DataFrame({'zone': [], 'number': []})

for col_num in range(0, len(border.columns), 2):
    curr_lon_name = border.columns[col_num]
    curr_lat_name = border.columns[col_num + 1] # PROBLEM IS HERE
    num = curr_lon_name.split("_")[-1]
    border = border[[curr_lon_name, curr_lat_name]].dropna()
    border[curr_lon_name] = border[curr_lon_name].replace(r'[()]', '', regex=True)
    border[curr_lat_name] = border[curr_lat_name].replace(r'[()]', '', regex=True)
    border[curr_lon_name] = pd.to_numeric(border[curr_lon_name], errors='coerce')
    border[curr_lat_name] = pd.to_numeric(border[curr_lat_name], errors='coerce')
    geometry2 = [Point(xy) for xy in zip(border[curr_lon_name],border[curr_lat_name])]
    border_point = gpd.GeoDataFrame(border,crs=crs,geometry=geometry2)
    turin_final = Polygon([[p.x, p.y] for p in border_point.geometry])
    within_turin = turin_point[turin_point.geometry.within(turin_final)]
    curr_len = len(within_turin)
    pd_out = pd_out.append({'zone': "long_lat_{}".format(num), 'number': curr_len}, ignore_index=True)