将pandas列传递给函数时,“ValueError:序列的真值不明确”

2024-09-25 00:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据其他4列的值生成一个boolean类型的新列。我有一个函数is_proximal,它接受两个2元组(4个值)并返回一个布尔值。在

我正在将列从pandas DataFrame传递给这个函数。is_proximal函数反过来用参数调用geopy.distance.distance。在

def is_proximal(p1, p2, exact=True):
    dist = distance(p1, p2)

    if exact:
        return dist.miles < 0.75  # mile threshold

    return dist.m < 100  # meter threshold



airbnb_coords = (df.loc[:, "lat_airbnb"], df.loc[:, "long_airbnb"])
homeaway_coords = (df.loc[:, "lat_homeaway"], df.loc[:, "long_homeaway"])
exacts.loc[:, "proximal"] = is_proximal(airbnb_coords, homeaway_coords)

这将导致以下错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我很难理解为什么会发生这个错误。我需要做些什么改变才能完成我正在努力做的事情?在

预期的输出是boolean类型的附加列。输入数据帧df在所有列中都包含整数值。在

完整的回溯:

^{pr2}$

Tags: 函数类型dfisdistcoordslocexact
1条回答
网友
1楼 · 发布于 2024-09-25 00:31:51

从回溯可以清楚地看出,is_proximal内部调用的distance函数中出现了错误。这让我相信,当函数要处理标量数据时,您传递的是Series对象。在

请参阅Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()中的讨论,在pandas系列中使用python逻辑运算符会导致相同的错误。在

在您的例子中,解决方案是迭代数据,并将每组坐标一次传递给函数。在

df['proximal'] = [
    is_proximal((a, b), (c, d)) 
    for a, b, c, d in df[['lat_x', 'long_x', 'lat_y', 'long_y']].values
]

相关问题 更多 >