파이썬 for문 연도별 반복 데이터프레임생성
조회수 6991회
input으로 값을 입력받아서 연도별로 for문을 돌린 값이 데이터프레임에 저장되게 하고 싶습니다.
2019년부터 10년간 반복하려하고
2019년에 중년주택금액 --> 2009에서 2013평균 / 젊은주택가치-->2014에서 2019평균 / 중년주택가치-->두값 나눈것
2018년은 2008~2012평균 / 2013~2018평균 / 두값 나눈것
이런식으로 1년식 줄어든 값을 계산하고 싶습니다.
path = r'C:\Users\admin\Desktop\Python\법정동코드_전체자료.xlsx'
code_df=pd.read_excel(path)
x=input('찾으실 주소를 입력하세요:') #한글로 입력하여 그에 대입하는 코드 찾음
code_select_df = code_df[code_df['폐지여부'] == '존재']
cod_sample_df = code_select_df[code_select_df['법정동명'] == x]
cod_sample_df['법정동코드']
cod = cod_sample_df['법정동코드']
x=str(cod.iloc[0])
x=x[0:5] #긴 법정동코드 중 5자리만 필요
y=int(input('기준연도를 입력하세요:'))
df_base= pd.DataFrame(columns=['연도','중년주택가치','젊은주택가격','중년주택가격'])
for j in range(0,10):
k=y-j
price_df=get_year_realprice('x','str(k)')
#중년주택 가치 산출 연도 입력
temp=price_df['전용면적']
price_df['전용면적']=pd.to_numeric(temp)
temp = price_df['거래금액'].apply(lambda x: x.replace(',', '') )
price_df['거래금액'] = pd.to_numeric(temp)
price_df['평당단가'] = price_df['거래금액'] / price_df['전용면적'] / 3.3
temp=price_df['건축년도']
price_df['건축년도']=pd.to_numeric(temp)
price_new_df = price_df[price_df['건축년도'] >=int(k)-4]
#젋은 주택 기준 = 준공 후 5년이내
price_select_df = price_df[price_df['건축년도'] >= int(k)-9]
price_old_df = price_select_df[price_select_df['건축년도']<= int(k)-5]
#중년 주택 기준 = 준공 후 6~10년 이내
old_price = np.mean(price_old_df['평당단가'])
new_price = np.mean(price_new_df['평당단가'])
mah_value=(old_price/new_price)
df_base=df_base.append(pd.DataFrame([[str(k), mah_value, new_price, old_price]],columns=['연도','중년주택가치','젊은주택가격','중년주택가격']),ignore_index=True)
df_base
get_year_realprice는 위에 정의를 해놨는데 이 부분을 잘 작동하는것으로 나타납니다. (이미 존재하는 코드라 바로 가져다씀)
def get_realprice(code, date):
url = 'http://openapi.molit.go.kr:8081/OpenAPI_ToolInstallPackage/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade'
key = 'NfQ7K6WgSudMMtb8YT5AC3%2FrDhHvg%2BZupj%2Fy4fze4XxJ61XctYdvZEc5wNFrqargp5yLGQwRw7RY16eCAebIbg%3D%3D'
real_url = url +'?'+ 'LAWD_CD={}&DEAL_YMD={}&serviceKey={}'.format(code, date, key)
data = requests.get(real_url)
data_bs = bs4.BeautifulSoup(data.text, 'lxml-xml')
item_list = data_bs.find_all('item')
거래금액리스트 = []
건축년도리스트 = []
년리스트 = []
월리스트 = []
일리스트 = []
법정동리스트 = []
아파트리스트 = []
전용면적리스트 = []
층리스트 = []
지번리스트 = []
지역코드리스트 = []
for item in item_list:
거래금액리스트.append(item.find('거래금액').text)
건축년도리스트.append(item.find('건축년도').text)
년리스트.append(item.find('년').text)
월리스트.append(item.find('월').text)
일리스트.append(item.find('일').text)
법정동리스트.append(item.find('법정동').text)
아파트리스트.append(item.find('아파트').text)
전용면적리스트.append(item.find('전용면적').text)
층리스트.append(item.find('층').text)
지번리스트.append(item.find('지번').text)
지역코드리스트.append(item.find('지역코드').text)
result_df = pd.DataFrame({'거래금액':거래금액리스트,
'건축년도':건축년도리스트,'년':년리스트, '월':월리스트, '일':일리스트,
'법정동':법정동리스트, '아파트':아파트리스트,'전용면적':전용면적리스트,
'층':층리스트, '지번':지번리스트, '지역코드':지역코드리스트})
return result_df
def get_year_realprice(code, year):
year_list = []
for i in range(1, 13):
if i < 10:
temp_date = year + '0' + str(i)
else:
temp_date = year + str(i)
year_list.append(get_realprice(code, temp_date))
year_df = pd.concat(year_list)
year_df = year_df.reset_index()
del year_df['index']
del year_df['법정동']
del year_df['아파트']
del year_df['층']
del year_df['지번']
del year_df['일']
del year_df['지역코드']
return year_df
도와주시면 정말 감사하겠습니다!
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
2 답변
-
잘 되는 것 같습니다.
k는 int 이니 int(k) 부분만 수정하면 될 것 같으나 오류는 아니니 실행에 문제는 없고...그런데 질문이 무엇인건지...
2019
연도 중년주택가치 젊은주택가격 중년주택가격 0 2019 0.518687 413.246439 214.345396 1 2018 0.688188 287.400592 197.785632 2 2017 0.810316 230.767602 186.994569 3 2016 0.922552 182.836190 168.675836 4 2015 1.099251 145.339986 159.765101 5 2014 1.165235 133.570693 155.641223 6 2013 0.856553 158.622049 135.868213 7 2012 1.022391 133.735333 136.729819 8 2011 1.108385 135.849155 150.573229 9 2010 0.990234 150.722783 149.250750
2018
연도 중년주택가치 젊은주택가격 중년주택가격 0 2018 0.688188 287.400592 197.785632 1 2017 0.810316 230.767602 186.994569 2 2016 0.922552 182.836190 168.675836 3 2015 1.099251 145.339986 159.765101 4 2014 1.165235 133.570693 155.641223 5 2013 0.856553 158.622049 135.868213 6 2012 1.022391 133.735333 136.729819 7 2011 1.108385 135.849155 150.573229 8 2010 0.990234 150.722783 149.250750 9 2009 0.999133 147.929649 147.801344
-
pycharm 이나 visual studio code 사용하신다면,
old_price = ...
라인에 중단점 설정하고서, debug 모드로 실행해서 한줄씩 따라가보면 답 나올 것 같은데요.
댓글 입력