Première fois l'affichage sur StackOverflow, donc avec moi portent si je fais quelques faux pas :) Veuillezapplication d'une fonction lambda pour pandas géants dataframe
Je suis en train de calculer la distance entre deux points, en utilisant geopy, mais je ne peux pas vraiment faire fonctionner l'application réelle du calcul.
est ici la tête du dataframe je travaille avec (il y a quelques valeurs manquantes plus tard dans la trame de données, pas sûr si cela est le problème ou la façon de le traiter en général):
start lat start long end_lat end_long
0 38.902760 -77.038630 38.880300 -76.986200
2 38.895914 -77.026064 38.915400 -77.044600
3 38.888251 -77.049426 38.895914 -77.026064
4 38.892300 -77.043600 38.888251 -77.049426
I ai mis en place une fonction:
def dist_calc(st_lat, st_long, fin_lat, fin_long):
from geopy.distance import vincenty
start = (st_lat, st_long)
end = (fin_lat, fin_long)
return vincenty(start, end).miles
celui-ci fonctionne très bien quand donné la saisie manuelle.
Cependant, lorsque je tente d'appliquer() la fonction, je rencontre des problèmes avec le code ci-dessous:
distances = df.apply(lambda row: dist_calc(row[-4], row[-3], row[-2], row[-1]), axis=1)
Je suis assez nouveau pour python, toute aide sera très appréciée!
Edit: message d'erreur:
distances = df.apply(lambda row: dist_calc2(row[-4], row[-3], row[-2], row[-1]), axis=1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/frame.py", line 4262, in apply
ignore_failures=ignore_failures)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/frame.py", line 4358, in _apply_standard
results[i] = func(v)
File "<stdin>", line 1, in <lambda>
File "<stdin>", line 5, in dist_calc2
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/geopy/distance.py", line 322, in __init__
super(vincenty, self).__init__(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/geopy/distance.py", line 115, in __init__
kilometers += self.measure(a, b)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/geopy/distance.py", line 414, in measure
u_sq = cos_sq_alpha * (major ** 2 - minor ** 2)/minor ** 2
UnboundLocalError: ("local variable 'cos_sq_alpha' referenced before assignment", 'occurred at index 10')
Si je copie vos données et exécuter votre code, cela fonctionne. Quelque chose doit être différent de vos données et/ou du code. Aussi, pourquoi ne partagez-vous pas les problèmes que vous rencontrez? Lisez également [** MCVE **] (http://stackoverflow.com/help/mcve). Cela nous aidera à vous aider. – piRSquared
"J'ai des ennuis"? Quel problème??? Qu'est-ce qui possède des gens pour afficher un tel flou? –
@Ribzy, quel est le message d'erreur que vous obtenez? – MedAli