【问题标题】:Creating a numpy array from a loop从循环创建一个 numpy 数组
【发布时间】:2018-09-26 09:25:23
【问题描述】:

我正在尝试从下面的循环中找到一种打印最小值的方法。输出既不是列表也不是 numpy 数组(见下面的输出)。另请参阅我的数据集 df,附在下面。

代码

from geopy.geocoders import Nominatim

df = pd.read_csv("dummy dataset.csv")

cities=['London','Edinburgh','Manchester']
geolocator = Nominatim(user_agent="my-application",timeout=None)
for city in cities:
    location = geolocator.geocode(city)

    df['GTC'] = df['height']*location.latitude + df['width']*location.longitude
    print(city,sum(df['GTC']))

结果

London  44060.839699659
Edinburgh   44707.029210128
Manchester  43565.213231322

我试过代码如:print("The smallest GTC is: ", min(sum(df['GTC'])))

并尝试创建一个数组:a = np.asarray(sum(df['GTC']))

但这些都不能解决问题。任何帮助表示赞赏

【问题讨论】:

    标签: python numpy geocoding


    【解决方案1】:

    一个简单的解决方案如下:

    import numpy as np
    import pandas as pd
    from geopy.geocoders import Nominatim
    
    df = pd.read_csv("dummy dataset.csv")
    cities=['London','Edinburgh','Manchester']
    geolocator = Nominatim(user_agent="my-application",timeout=None)
    mingtc = np.inf
    mincity = 'unknown'
    for city in cities:
        location = geolocator.geocode(city)
        gtc = sum(height*location.latitude + width*location.longitude)
        if gtc < mingtc:
            mingtc = gtc
            mincity = city
    print(mincity, mingtc)
    

    使用 Pandas 功能可能会做得更好,但不清楚数据框的实际格式是什么,或者 location.latitude、location.longitude、height 和 width 是什么样的(它们是浮点数、数组还是其他什么? )。这使得展示更复杂的方法变得困难。

    上述解决方案适用于您当前在问题中提供的代码。

    【讨论】:

    • 刚刚运行(在将高度更改为 df['height'] 并将宽度更改为 df['width'] 之后),并得到以下错误: ValueError: The truth value of a Series is ambiguous。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
    • @MRHarv 是的,我刚刚意识到。我添加了一个 sum() 函数,就像在你的代码中一样。再检查一遍。至少错误告诉我们位置是什么(显然,它是一个数据框,但 geopy 将不太为人所知)。
    • 请注意,df['height']df['width'] 不在您的原始问题中。
    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2018-11-13
    • 2012-09-21
    • 2017-12-30
    • 1970-01-01
    相关资源
    最近更新 更多