두서 없이 블로그 하는것 같군...
python - pandas를 통해 두 지점의 위경도 리스트를 불러온 후, 두 지점의 위경도 구하는 코딩을 구현해봤다.
그냥 두 지점을 거리를 구하는 것은 구글 검색하면 쉽게 나와서 공식은 어렵지 않게 만들었는데, (복붙했다)
pandas에서 구할려다 보니 잘 안되서, 고민을 너무 많이 했다.. (역시 나는 코딩 센스가 없다.)
import pandas as pd import numpy as np
from math import sin, cos, sqrt, atan2, radians
#엑셀 csv파일에서 두지점의 위경도 지점 불러옴 df = pd.read_csv('../csv_data/apt_result.csv', encoding='cp949')
|
#대략 이런 포맷이다.
df1 = df[['xpos','ypos','long','lat']]
df1.head()
|

## 이 부분이 나에게 가장 고민을 많이 하게 만든 부분이다.
pandas에서 바로 커스텀 함수(mydistance)로 위경도 거리 구하면 될줄 알았다.
그런데 안됐다.
아래 처럼, 전부 리스트로 추출한후, 계산 한 함수를 돌려보니 계산이 됐다.
pandas에서는 바로 안되고, 리스트로 추출하니까 되는지 아직도 모르겠다. 일단 됐으니까,,
그런데, 이 파일은 그나마 몇 백개 안되니까 몇 초안에 계산이 되었는데,
아래처럼 리스트 추출해서 계산한다면, 몇천만줄, 몇억줄은 내 맥북 멈출것 같은 느낌이 들어서 쎄하다.
아래처럼 위경도 거리구하면 계산 속도가 느리다.
좀 더 빨리 할수 있는 방법이 있을것 같지만, 내 능력 밖이다.
df1_xpos = [] df1_ypos = []
df1_long = []
df1_lat = []
for i in range(len(df1)):
df1_xpos.append(df1['xpos'][i])
df1_ypos.append(df1['ypos'][i])
df1_long.append(df1['long'][i])
df1_lat.append(df1['lat'][I])
|
df1_distance = [] for i,j,k,l in zip(df1_xpos,df1_ypos,df1_long,df1_lat):
df1_distance.append(mydistance(i,j,k,l)) |
[0.21501830417233017,
0.21501830417233017,
0.21501830417233017,
0.21731888422264176,
0.21731888422264176,
0.21731888422264176,
0.21731888422264176,
0.0491964065334208,
0.0491964065334208,
....
]
### Jupiter notebook에 작성한것을 블로그에 이쁘게 올리는 방법을 알고 싶다.
### 위경도 거리구한 df1_dis1와 기존 df1와 concat하여, 내가 원하는 데이터프레임(df2)을 구하였다.
df1_dis1 = pd.DataFrame(data = df1_distance)
df1_dis1.head() |
df2 = pd.concat([df1, df1_dis1], axis=1) df2.head()
|
df2.rename(columns = {0 : 'distance'}, inplace = True) df2.head() |
