有这样一个数据框:
newbs longitudeY1 latitudeX1 oldbs longitudeY2 latitudeX2 BSC LAC
0 IR021 105.98790 52.78068 IR0505 104.2578286633 52.655474988944 396402 5244
1 IR021 105.98790 52.78068 IR1017 104.59863944009 52.384744395507 396402 5244
2 IR021 105.98790 52.78068 IR1020 104.14058703968 52.010800749578 396402 5307
3 IR021 105.98790 52.78068 IR1023 104.15358510877 52.719410098781 396402 5319
4 IR021 105.98790 52.78068 IR1030 104.20639053885 52.573995078092 396402 5244
... ... ... ... ... ... ... ... ...
4192 IR066 105.68000 54.34308 IR2964 103.24349640892 52.974271985462 401257 5272
4193 IR066 105.68000 54.34308 IR2965 105.67618886914 54.995100603944 401257 5251
4194 IR066 105.68000 54.34308 IR2969 103.47831487935 52.720066254791 401257 5259
4195 IR066 105.68000 54.34308 IR2970 103.72418234894 52.09637656718 401257 5272
4196 IR066 105.68000 54.34308 IR2981 103.85440774559 52.517154218339 401257 5272
如何在此表中应用公式 sqrt((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2)) ?在我的代码中它抱怨错误:
Traceback (most recent call last):
File "P:\projects\FillingInDataForTheSite\py.py", line 308, in <module>
newNeighbourTable["distance"] = math.sqrt((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2))
File "C:\Users\david\AppData\Roaming\Python\Python310\site-packages\pandas\core\series.py", line 248, in wrapper
raise TypeError(f"cannot convert the series to {converter}")
TypeError: cannot convert the series to <class 'float'>
这是我的代码,在评论中这些是我解决问题的尝试:
newNeighbourTable = newdatatable.merge(olddatatable, how='cross')
print(" - Добавляю общую таблицу.")
x1=newNeighbourTable["latitudeX1"].astype(float)
x2=newNeighbourTable["latitudeX2"].astype(float)
y1=newNeighbourTable["longitudeY1"].astype(float)
y2=newNeighbourTable["longitudeY2"].astype(float)
#newNeighbourTable["distance"] = ""
newNeighbourTable["distance"] = math.sqrt((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2))
#for i, row in newNeighbourTable.iterrows():
# print(ewNeighbourTable.loc[i])
#df_index = newNeighbourTable.loc[i]
#results = math.sqrt((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2))
#newNeighbourTable["distance"] = results
print(newNeighbourTable)
print(newNeighbourTable.dtypes)
math适用于单个数字。你有 形式的数据Pandas.Series,里面有Numpy.array,所以Numpy它可以使用它:通常你不应该写循环;如果你写了
iterrows,那么你就做错了。Pandas或中有现成的函数Numpy,或者您可以编写自己的函数并将其应用map到apply该系列中。