前提・実現したいこと
pythonで関数の結果をデータフレームに入れたい。
発生している問題・エラーメッセージ
j = 0 while j < 10 : def azimuth(x1, y1, xi, yi): xi = input_sheet_df.iloc[j,8] yi = input_sheet_df.iloc[j,7] #iはデータセットの緯度経度 # Radian角に修正 _x1, _y1, _xi, _yi = x1*pi/180, y1*pi/180, xi*pi/180, yi*pi/180 Δx = _xi - _x1 _y = sin(Δx) _x = cos(_y1) * tan(_yi) - sin(_y1) * cos(Δx) psi = atan2(_y, _x) * 180 / pi if psi < 0: return 360 + atan2(_y, _x) * 180 / pi else: return atan2(_y, _x) * 180 / pi def distance(x1, y1, xi, yi, r): xi = input_sheet_df.iloc[j,8] yi = input_sheet_df.iloc[j,7] _x1, _y1, _xi, _yi = x1*pi/180, y1*pi/180, xi*pi/180, yi*pi/180 Δx = _xi - _x1 val = sin(_y1) * sin(_yi) + cos(_y1) * cos(_yi) * cos(Δx) return r * acos(val) #1はタイムズスクエアの緯度経度 x1 = -73.987402 y1 = 40.756314 r = 6378.137e3 dis= distance(x1, y1, xi, yi, r) / 1e3 # kmに変換 print("{0:.3f} ".format(dis)) j += 1
上記のprint関数で得たい結果は表示することができましたが、
データフレームに入れようとすると上手く表示できません。
###試したこと
distance = pd.DataFrame() distance['distance'] = ["{0:.3f} ".format(dis)]
こうするとj=9の関数disの値のみが入ってしまいます。
j=0~8までの結果もデータフレームに入れたい場合どうすればよいのでしょうか。
補足情報(FW/ツールのバージョンなど)
python
下記コードは質問のコードのどこに追加したのですか?
> distance = pd.DataFrame()
distance['distance'] = ["{0:.3f} ".format(dis)]
例示のコードはエラーで動かなくないですか?
xiが定義されてないまま使われてますね
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-9-60772fa8e551> in <module>()
27 y1 = 40.756314
28 r = 6378.137e3
---> 29 dis= distance(x1, y1, xi, yi, r) / 1e3 # kmに変換
30 print("{0:.3f} ".format(dis))
31 j += 1
NameError: name 'xi' is not defined
回答1件
あなたの回答
tips
プレビュー