Python 3中某列的For循环逻辑出错

Python 3中某列的For循环逻辑出错,python,pandas,for-loop,logic,Python,Pandas,For Loop,Logic,我有一份地点清单。对于“位置”列中的每个位置,都有一个函数,用于查找其坐标(如果坐标尚未存在)。此操作对所有用户都执行。循环复制所有行中纬度和经度的最后一个值,但它不应该这样做。我在哪里犯错 我所拥有的 location gpslat gpslong Brandenburger Tor na na India Gate na na Gateway of India na na 我想要什么 location g

我有一份地点清单。对于“位置”列中的每个位置,都有一个函数,用于查找其坐标(如果坐标尚未存在)。此操作对所有用户都执行。循环复制所有行中纬度和经度的最后一个值,但它不应该这样做。我在哪里犯错

我所拥有的

location           gpslat gpslong
Brandenburger Tor  na     na
India Gate         na     na
Gateway of India   na     na
我想要什么

location           gpslat gpslong
Brandenburger Tor  52.16  13.37
India Gate         28.61  77.22
Gateway of India   18.92  72.81
我得到了什么

location           gpslat gpslong
Brandenburger Tor  18.92  72.81
India Gate         18.92  72.81
Gateway of India   18.92  72.81
我的代码

i = 0
for location in df.location_clean:
    try:
        if np.isnan(float(df.gpslat.iloc[i])) == True:
                df.gpslat.iloc[i], df.gpslong.iloc[i] = find_coordinates(location)
                print(i, "Coordinates Found for --->", df.location_clean.iloc[i])
        else:
            print(i,'Coordinates Already Present')
    except:
        print('Spelling Mistake Encountered at', df.location_clean.iloc[i], 'Moving to NEXT row')
        continue
    i = i + 1

我猜,我在索引I或语句df.gpslat.iloc[I],df.gpslong.iloc[I]=find_coordinanceLocation中犯了一个逻辑错误。我试着改变它们并重新运行循环,但结果是一样的。这也是一个耗时的过程,因为有数千个位置。

如果不查看数据,很难提供帮助,但这可能会对您有所帮助

在将来,请提供您的数据的最小示例,以便我们可以使用它并更好地帮助您。 此外,在没有提供确切错误的情况下,你不应该使用“except”——在这种情况下,你的except会捕获所有错误,即使除了拼写错误之外还有其他错误——而你却没有注意到! 在数据帧上进行迭代时,请使用iterrows—它使数据帧更具可读性,并且不必使用额外的变量 使用iloc将打开pandas设置,并显示CopyWarning。请参见此处:,尽量避免。 代码如下:

# ____ Preparation ____ 
import pandas as pd
import numpy as np

lst = [['name1', 1, 3]
      ,['name2',1, 3]
      ,['name3',None, None]
      ,['name4',1, 3]
       ]
df = pd.DataFrame(lst,    columns =['location', 'gpslat', 'gpslong',])
print(df.head())

# ____ YOUR CODE ____ 
for index, row in df.iterrows():
       try:
              if np.isnan(float(row['gpslat'])) == True:
                     lat, long = find_coordinates(row['location'])
                     print(lat,long)
                     df.at[index, 'gpslat'] = lat
                     df.at[index, 'gpslong'] = long

       except TypeError:  # exchange this with the exact error which you want to  catch
              print('Spelling Mistake Encountered at', row['location'], ' in row ', index, 'Moving to NEXT row')
              continue
print(df.head())

请根据您提供的示例将您的df粘贴到您的问题中。我建议查看find_coordinates函数返回的内容-它是否实际返回不同的值?是的,它确实返回不同的值,因为我先检查了它,然后在那里应用了它。它现在正在工作。在任何处理开始之前,我增加了浏览器窗口的等待时间。谢谢克里伯