【问题标题】:Error while applying function to each row in Python将函数应用于Python中的每一行时出错
【发布时间】:2020-01-17 17:18:27
【问题描述】:

我正在尝试将函数应用于文件中的每一行,最终结果仅应用于文件中的第一行。如何将以下函数应用于每一行,以便打印语句为所有行提供应用函数

样本数据

cvdt35_timestamp_s  gps_lat_dd  gps_lon_dd  coord
03:26.8 42.37659    -83.59011667    [42.3765899995963,-83.5901166667541]
03:27.8 42.37659667 -83.59011667    [42.3765966663758,-83.5901166667541]
03:28.8 42.37660667 -83.59012   [42.3766066670418,-83.5901200001438]
03:33.9 42.376665   -83.59017167    [42.3766650001208,-83.5901716664434]
03:35.9 42.37667167 -83.59020667    [42.3766716669003,-83.5902066667875]
03:36.9 42.37667167 -83.59021667    [42.3766716669003,-83.59021666646]
42:33.6 42.37667167 -83.59021667    [42.3766716669003,-83.59021666646]
42:41.8 42.37667167 -83.59021333    [42.3766716669003,-83.590213333567]
42:53.9 42.37682    -83.58996   [42.3768200000127,-83.5899599999189]
42:59.9 42.37697    -83.58992167    [42.3769700000683,-83.5899216666818]


import overpy
import pandas as pd
import numpy as np

df = pd.read_csv("/home/runner/sample.csv")
df.sort_values(by=['cvdt35_timestamp_s'],inplace=True)

api= overpy.Overpass()
box = 0.0005

with open("sample.csv") as f:
  for row in df.index:
    query = 'way('+str(df.gps_lat_dd.iloc[row]-box)+','+str(df.gps_lon_dd.iloc[row]-box)+','+str(df.gps_lat_dd.iloc[row]+box)+','+str(df.gps_lon_dd.iloc[row]+box)+') ["highway"]; (._;>;); out body;'
  print (query)

我得到的结果如下,而不是值列表

way(42.37647,-83.59042167,42.37747,-83.58942167) [“高速公路”]; (._;>;);出体;

【问题讨论】:

  • 您的 print(query) 超出了它所定义的循环。

标签: python-3.x pandas function loops


【解决方案1】:

要么将你的打印语句移动到你的循环中(见下文):

with open("sample.csv") as f:
  for row in df.index:
    query = 'way('+str(df.gps_lat_dd.iloc[row]-box)+','+str(df.gps_lon_dd.iloc[row]-box)+','+str(df.gps_lat_dd.iloc[row]+box)+','+str(df.gps_lon_dd.iloc[row]+box)+') ["highway"]; (._;>;); out body;'
    print (query)

或者您可以附加到列表然后打印该列表:

queries = []
with open("sample.csv") as f:
  for row in df.index:
    query = 'way('+str(df.gps_lat_dd.iloc[row]-box)+','+str(df.gps_lon_dd.iloc[row]-box)+','+str(df.gps_lat_dd.iloc[row]+box)+','+str(df.gps_lon_dd.iloc[row]+box)+') ["highway"]; (._;>;); out body;'
    queries.append(query)
print(queries)

【讨论】:

  • @anonymous13 好的,太好了!你介意接受答案吗?谢谢!!
【解决方案2】:

对于 for 循环中的每次迭代,您都在对该行进行查询,并且变量查询由该值更新。在这里,您要打印的查询是最后一个查询。您需要首先为查询创建一个列表并将每个查询附加到列表中。 这应该可以解决您的问题:

query = list()
for row in df.index:
        querytemp = query = 'way('+str(df.gps_lat_dd.iloc[row]-box)+','+str(df.gps_lon_dd.iloc[row]-box)+','+str(df.gps_lat_dd.iloc[row]+box)+','+str(df.gps_lon_dd.iloc[row]+box)+') ["highway"]; (._;>;); out body;'
        query.append(querytemp)
print (query)

【讨论】:

    猜你喜欢
    • 2017-01-05
    • 2018-10-31
    • 1970-01-01
    • 2013-03-18
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 2013-02-23
    相关资源
    最近更新 更多