当前位置: 首页 > 知识库问答 >
问题:

太多的值来解包试图调用函数的两个数据帧列使用应用和lambda

龚承嗣
2023-03-14

我正在尝试使用Geopy库更正代码,以获得某些地址的lat long。

所以我写了这个函数:

def latlong(street, city):
    try:
        location = geolocator.geocode(str(street) + ', ' + str(city))
        if location is None:
            return 0, 0
        return location.latitude, location.longitude
    except:
        return 0, 0

df['LAT'], df['LONG'] = df.apply(lambda x: latlong(x['STREET'], x['CITY']), axis = 1)

代码运行了一段时间,然后出现以下错误:

ValueError:要解压缩的值太多(应为2个)

但是,如果我将代码更改为有两个函数,一个用于lat,另一个用于long,它工作得很好,但是运行时间会增加一倍,我将对API执行两倍的请求。

def lat(street, cidade):
    location = geolocator.geocode(str(street) + ', ' + str(city))
    if location is None:
        return 0
    return location.latitude

def long(street, cidade):
    location = geolocator.geocode(str(street) + ', ' + str(city))
    if location is None:
        return 0
    return location.longitude

df['LAT'] = df.apply(lambda x: lat(x['STREET'], x['CITY']), axis = 1)
df['LONG'] = df.apply(lambda x: long(x['STREET'], x['CITY']), axis = 1)

是否有一种方法可以使用apply和lambda调用函数来同时填充数据帧的两列?如何修复此“太多值无法解包”错误?

提前感谢您的帮助!

共有1个答案

姜胤
2023-03-14

为了避免进行两次API调用并使程序更快,我首先将两个lat long都添加到一列中。然后将其拆分为两列。这样,,

df['LAT_LOG'] = df.apply(lambda x: latlong(x['STREET'], x['CITY']), axis = 1)
df['LAT'] = df.apply(lambda x: x[0][0], axis=1)
df['LONG'] = df.apply(lambda x: x[0][1], axis=1)

稍后可以删除LAT_LONG列:

del df['LAT_LOG']
 类似资料:
  • 读取列中包含时间值的csv文件,并尽可能高效地获取包含1列值和日期时间索引的数据帧。我做了一个read_csv,然后是一个stack和下面的函数,但是这会消耗更多的时间和内存。 有人有更好的方法吗? 并获得:

  • 怎么办? **添加详细示例如下***

  • 问题内容: 如何调用函数列表并使用列表推导? 我知道我能做 但是我可以在下面做吗? 如果我的函数列表在课堂上,那么对于那些善良的人们来说,还有一个问题 它有效吗? 问题答案: 当然,您可以按照FábioDiniz所说的:)进行操作,但是对于将类方法用作可调用对象时,必须将其作为参数提供给对象: 该对象必须作为可调用对象的参数提供,因为当您查看方法的定义时,该方法需要一个参数“ self ”

  • df1有每月时间索引,df2有季度时间索引。df1和df2有不同的行数和列数,我想:(1)并排连接它们并保持它们的索引。(2)输出到excel文件。 我尝试过pd.concat,但是这种方法连接基于我不想要的数据帧索引之一的数据帧 excel中的预期结果:

  • 我从这个URL刮取了这个表: "https://www.patriotsoftware.com/blog/accounting/average-cost-living-by-state/" 看起来像这样: 然后我编写了这个函数来帮助我将字符串转换成整数: 当我只将函数应用于一列时,它就会工作。我在这里找到了关于在多个列上使用的答案:如何将函数应用于多个列 但我下面的代码不起作用,也不会产生错误:

  • 问题内容: 我有一个带有timeindex和3列的数据帧,其中包含3D矢量的坐标: 我想对也返回向量的每一行应用转换 但是如果我这样做: 我最后得到了一个以元组为元素的熊猫系列。这是因为apply将在不解压的情况下获取myfunc的结果。如何更改myfunc,以便获得具有3列的新df? 编辑: 以下所有解决方案均有效。Series解决方案确实允许使用列名,而List解决方案的执行速度似乎更快。 问