판다 1.0.5
위도 및 경도로 향상시키고 싶은 트랜잭션 파일이 있습니다.
트랜잭션 파일에 우편 번호가있는 경우 해당 우편 번호를 사용하여 위도와 경도를 조회하고 파일에 추가하고 싶습니다.
거래 파일에 도시 / 주가 있고 우편 번호가없는 경우 해당 도시 / 주를 사용하여 위도와 경도를 조회하고 파일에서 업데이트 하고 싶습니다 . 우편 번호가없는 경우에만.
코드의 문제는 열 이름에 "_x"를 추가하는 것입니다. 두 번째 문제는 도시 조회가 우편 번호 조회를 덮어 쓰는 것입니다.
import pandas as pd
import numpy as np
#The transaction file
data = [
['MCDONALDS RESTAURANT STORE 100', '94521', '', ''],
['MCDONALDS RESTAURANT STORE 200', '94521', 'CLAYTON', 'CA'], #zipcode is present so do not lookup with city
['BURGER KING RESTAURANT STORE 100', '', 'CONCORD', 'CA'],
['BURGER KING RESTAURANT STORE 200', '', 'CONCORD', 'CA'],
['TACO BELL RESTAURANT STORE 100', '', '', ''],
]
t = pd.DataFrame(data, columns = ['merchant', 'zipcode', 'city', 'state'])
#Step 1. Use zipcodes to lookup latitudes
data = [
['94521', '37.9780', '-121.0311'],
['94522', '40.1234', '-200.1234'],
]
z = pd.DataFrame(data, columns = ['zipcode', 'latitude', 'longitude'])
t = pd.merge(t, z[['zipcode', 'latitude', 'longitude']], how='left', on='zipcode') #works perfectly
#Step 2. Use city/states to lookup latitudes, if there was no zipcode
data = [
['CA', 'CONCORD', '37.9780', '-121.0311'],
['CA', 'CLAYTON', '40.1234', '-200.1234'],
]
c = pd.DataFrame(data, columns = ['state', 'city', 'latitude', 'longitude'])
t = pd.merge(t, c[['state', 'city', 'latitude', 'longitude']], how='left', on=['state', 'city']) #this line is the problem
그다지 우아하지는 않지만 나머지 (lon / lat is NA) 행에서만 두 번째 병합을 수행 한 다음 두 부분을 연결할 수 있습니다.
m = t.latitude.notna()
t = pd.concat([t.loc[m],
pd.merge(t.loc[~m, ['merchant', 'zipcode', 'city', 'state']], c[['state', 'city', 'latitude', 'longitude']], how='left', on=['state', 'city'])])
결과:
merchant zipcode city state latitude longitude
0 MCDONALDS RESTAURANT STORE 100 94521 37.978 -121.0311
1 MCDONALDS RESTAURANT STORE 200 94521 CLAYTON CA 37.978 -121.0311
0 BURGER KING RESTAURANT STORE 100 CONCORD CA 37.978 -121.0311
1 BURGER KING RESTAURANT STORE 200 CONCORD CA 37.978 -121.0311
2 TACO BELL RESTAURANT STORE 100 NaN NaN
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다