Python for循环遍历一列的所有行

Posted

技术标签:

【中文标题】Python for循环遍历一列的所有行【英文标题】:Python for-loop to go through all rows of one column 【发布时间】:2019-10-24 09:30:17 【问题描述】:

我想从给定半径内的表格中提取所有坐标。 如何设置 for 循环?

为此我使用半正弦公式,我只输入中心点的纬度和经度值以及要测试的点的纬度和经度值(如果它在给定半径内)。

所以我认为我需要一个 for 循环,在其中为 lat 和 lon 列的每一行运行半正弦公式,如果坐标在半径内,我将它们保存在一个列表中。

#Get coordinates
#Center coordinates = nearest road location
lat1 = float(lowParkingUtilization.iloc[roadIndex].toLat)
lon1 = float(lowParkingUtilization.iloc[roadIndex].toLon)
#Test coordinates = scooter coordinates
insideRadius = []

radius = 2.50 # in kilometer

for i in eScooterVOI['lat']:
    lat2 = float(eScooterVOI['lat'][i])
    lon2 = float(eScooterVOI['lon'][i])
    a = haversine(lon1, lat1, lon2, lat2)

    if a <= radius:
        insideRadius += str(lon2)+","+str(lat2)
    else:

使用给定的代码,我收到以下错误消息:

 File "<ipython-input-574-02dadebee55c>", line 18

    ^
SyntaxError: unexpected EOF while parsing

【问题讨论】:

您需要在else 块中添加一些代码。 你可以从你的代码中删除else,因为它没有做任何事情。或者你可以把else: pass(带缩进) 【参考方案1】:

“如何设置 for 循环?”问题的正确答案是:你不知道。 pandas 数据帧不用于循环遍历它们的行。您需要做的是在数据框中创建两个新列,一列用于计算距离,另一列以您想要的格式存储名称:

eScooterVOI['dist'] = eScooterVOI.apply(lambda x: haversine(lon1, lat1, x['lon'], x['lat']), axis=1)
eScooterVOI['name'] = eScooterVOI['lon'].astype(str) + ',' + eScooterVOI['lat'].astype(str)

然后,要获取仅包含距离小于半径的坐标名称的列表,请使用:

insideRadius = list(eScooterVOI[eScooterVOI['dist'] <= radius]['name'])

顺便说一句:haversine 函数可以以接收pandas 系列而不是值的方式构建,这样它可以比使用df.apply 更快地实现,但这需要更改一些问题中没有的代码。

【讨论】:

【参考方案2】:

SyntaxError: unexpected EOF while parsing 错误信息表示部分代码块未完成,已到达代码末尾。

您的else 块至少需要一行代码。

例如:

else:
    lots_of_code_to_write_here

【讨论】:

【参考方案3】:

由于您的 else 块,您遇到了此错误。 当 Python 读取它时,它期望编写一些代码。 Python 没有找到任何因此发生错误。

您的代码可能正在运行,只需删除 else 块,您可以使用 if 块而不必使用 else 块。

无论如何,如果您绝对想使用 else 块,请尝试类似的方法:

if a <= radius:
    insideRadius += str(lon2)+","+str(lat2)
else : 
    pass

但我认为不推荐。

【讨论】:

以上是关于Python for循环遍历一列的所有行的主要内容,如果未能解决你的问题,请参考以下文章

for循环二维数组的取值方式?

如何循环遍历行,然后在每行循环遍历列直到找到NA,然后提取前一列的值

python中for循环前面换行最后不换行

python的openpyxl库怎么读取一行或者一列

python 如何在一个for循环中遍历两个列表

008.Python循环for循环