Как решить проблему с TypeError: cannot convert the series to ?
Есть такой dataframe:
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)
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
newNeighbourTable["distance"] = math.sqrt((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2))
^^^^^^^^^
math работает с одиночными числами. У вас данные в виде Pandas.Series, внутри них лежат Numpy.array, поэтому Numpy умеет с ними работать:
newNeighbourTable["distance"] = np.sqrt((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2))
^^^^^^^
Обычно никогда не нужно циклы писать, если вы пишете iterrows, то вы делаете что-то неправильно. Есть или готовая функция в Pandas или Numpy, или можно написать свою функцию и применить её через map или apply к серии.