[FAQ] (Daum부동산) DataFrame 행 추출과 컬럼으로 합치기

[FAQ] DataFrame 행(row) 정보를 추출하여 컬럼으로 합치기

크롤링 데이터 가공과 결측치 처리 예제 (Daum 부동산 예제)

  • Q: DataFrame의 두 행(row)이 하나의 데이터를 이룹니다. 짝수 행의 데이터를 추출하여 컬럼으로 만드려면 어떻게 하나요?
  • A: DataFrame.ix[] 인덱싱을 사용하여 짝수행 전체를 얻어 가공하고, pd.concat()을 이용여 합칠 수 있습니다.

http://fb.com/financedata
In [ ]:
 
In [1]:
import pandas as pd

url = "http://realestate.daum.net/iframe/maemul/maemulList.daum?areaCode=2130010&mcateCode=A1&saleTypeCode=S&tabName=maemulList&isExpanded=false&page=1"
dfs = pd.read_html(url, encoding='utf-8')

In [2]:
# 2개의 DataFrame을 읽었다

len(dfs)
Out[2]:
2

두번째 DataFrame을 얻는다.

총 60 행(row)이지만, 2개의 행(row)가 하나의 데이터를 이루고 있다. 짝수번째 행(row)는 부가적인 설명이 있다.

In [3]:
df = dfs[1] 
print(len(df), 'rows')

df.head(10)
60 rows
Out[3]:
최초게재일 종류/소재지 단지명 공급/전용(㎡) 매매가(만원) 문의처
0 매매 17.03.01 아파트장안동 한신 한신 109C/84 공급면적 109.46㎡ 전용면적 84.4㎡ 37500 102 14/18 동원공인중개사사무. . 02-2216-8600
1 무융자 로얄층,기본구조,확트인조망굿,주차굿,입주협의 NaN NaN NaN NaN NaN NaN NaN
2 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 80B/59 공급면적 80.37㎡ 전용면적 59.9㎡ 54000 103 중/20 백산 공인중개사 02-3291-0088
3 하루종일 밝고 환한 남향 확장형 매매예요 NaN NaN NaN NaN NaN NaN NaN
4 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 34700 101 6/22 쌍용공인중개사사무. . 02-962-2244
5 급매물 대단지 중랑천조망 , NaN NaN NaN NaN NaN NaN NaN
6 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 34000 115 25/25 쌍용공인중개사사무. . 02-962-2244
7 대단지 역세권 조망틔이고 일조권좋은집 , 세끼고 매매 NaN NaN NaN NaN NaN NaN NaN
8 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 35000 113 중/25 쌍용공인중개사사무. . 02-962-2244
9 대단지 역세권 내부 수리 ,거실및 방확장 , NaN NaN NaN NaN NaN NaN NaN

짝수번째 행(인덱스가 1,3,5,7..)은 NaN을 포함하고 있다.

가장 간단한 방법은 NaN을 가지고 있는 행을 제거(drop)하는 것이다. (DataFrame.dropna)

In [4]:
df_tmp = df.dropna()
print(len(df_tmp), 'rows')

df_tmp.head(10)
30 rows
Out[4]:
최초게재일 종류/소재지 단지명 공급/전용(㎡) 매매가(만원) 문의처
0 매매 17.03.01 아파트장안동 한신 한신 109C/84 공급면적 109.46㎡ 전용면적 84.4㎡ 37500 102 14/18 동원공인중개사사무. . 02-2216-8600
2 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 80B/59 공급면적 80.37㎡ 전용면적 59.9㎡ 54000 103 중/20 백산 공인중개사 02-3291-0088
4 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 34700 101 6/22 쌍용공인중개사사무. . 02-962-2244
6 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 34000 115 25/25 쌍용공인중개사사무. . 02-962-2244
8 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 35000 113 중/25 쌍용공인중개사사무. . 02-962-2244
10 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79A/59 공급면적 79.7㎡ 전용면적 59.98㎡ 55000 101 13/20 미래공인중개사사무. . 02-960-6800
12 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79C/59 공급면적 79.18㎡ 전용면적 59.96㎡ 53500 103 12/20 미래공인중개사사무. . 02-960-6800
14 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79A/59 공급면적 79.7㎡ 전용면적 59.98㎡ 54000 102 11/19 미래공인중개사사무. . 02-960-6800
16 매매 17.03.01 아파트전농동 래미안크레시티 래미안크레시티 112A/84 공급면적 112.21㎡ 전용면적 84.96㎡ 62000 207 3/21 금강부동산공인중개. . 02-2245-0006
18 매매 17.03.01 아파트답십리동 답십리대우 답십리대우 108/84 공급면적 108.45㎡ 전용면적 84.99㎡ 42000 102 저/21 스마일부동산공인중. . 02-2246-8944

DataFrame의 행,열 조작

In [5]:
# ix[] 인덱싱을 사용하여 짝수번째 행(row)만 추출한다.

df1 = df.ix[::2,:]

print(len(df1), 'rows')
df1.head(10)
30 rows
Out[5]:
최초게재일 종류/소재지 단지명 공급/전용(㎡) 매매가(만원) 문의처
0 매매 17.03.01 아파트장안동 한신 한신 109C/84 공급면적 109.46㎡ 전용면적 84.4㎡ 37500 102 14/18 동원공인중개사사무. . 02-2216-8600
2 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 80B/59 공급면적 80.37㎡ 전용면적 59.9㎡ 54000 103 중/20 백산 공인중개사 02-3291-0088
4 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 34700 101 6/22 쌍용공인중개사사무. . 02-962-2244
6 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 34000 115 25/25 쌍용공인중개사사무. . 02-962-2244
8 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 35000 113 중/25 쌍용공인중개사사무. . 02-962-2244
10 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79A/59 공급면적 79.7㎡ 전용면적 59.98㎡ 55000 101 13/20 미래공인중개사사무. . 02-960-6800
12 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79C/59 공급면적 79.18㎡ 전용면적 59.96㎡ 53500 103 12/20 미래공인중개사사무. . 02-960-6800
14 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79A/59 공급면적 79.7㎡ 전용면적 59.98㎡ 54000 102 11/19 미래공인중개사사무. . 02-960-6800
16 매매 17.03.01 아파트전농동 래미안크레시티 래미안크레시티 112A/84 공급면적 112.21㎡ 전용면적 84.96㎡ 62000 207 3/21 금강부동산공인중개. . 02-2245-0006
18 매매 17.03.01 아파트답십리동 답십리대우 답십리대우 108/84 공급면적 108.45㎡ 전용면적 84.99㎡ 42000 102 저/21 스마일부동산공인중. . 02-2246-8944
In [6]:
# 이번에는 홀수번째 행(row)만 추출한다.

df2 = df.ix[1::2, 0]
df2.name = '비고'
df2.head(10)
Out[6]:
1       무융자  로얄층,기본구조,확트인조망굿,주차굿,입주협의
3              하루종일 밝고 환한 남향 확장형 매매예요
5                   급매물  대단지  중랑천조망 ,
7     대단지  역세권  조망틔이고 일조권좋은집 , 세끼고 매매
9          대단지  역세권  내부 수리 ,거실및 방확장 ,
11                역세권  로얄동, 햇빛 잘 드는 집
13            역세권  확장형  베란다 확장된 깔끔한 집
15                    역세권  기본형, 입주 가능
17            대단지  확장형  확장형 채광좋음 입주가능
19                                NaN
Name: 비고, dtype: object
In [7]:
# df1과 df2를 합치기(concat)위해 위해 index를 동일하게 초기화 한다.
df1.reset_index(drop=True , inplace=True)
df2.reset_index(drop=True , inplace=True)

# df1 과  df2 를 컬럼으로 합치기
result = pd.concat([df1, df2], axis=1)
result.head(10)
Out[7]:
최초게재일 종류/소재지 단지명 공급/전용(㎡) 매매가(만원) 문의처 비고
0 매매 17.03.01 아파트장안동 한신 한신 109C/84 공급면적 109.46㎡ 전용면적 84.4㎡ 37500 102 14/18 동원공인중개사사무. . 02-2216-8600 무융자 로얄층,기본구조,확트인조망굿,주차굿,입주협의
1 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 80B/59 공급면적 80.37㎡ 전용면적 59.9㎡ 54000 103 중/20 백산 공인중개사 02-3291-0088 하루종일 밝고 환한 남향 확장형 매매예요
2 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 34700 101 6/22 쌍용공인중개사사무. . 02-962-2244 급매물 대단지 중랑천조망 ,
3 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 34000 115 25/25 쌍용공인중개사사무. . 02-962-2244 대단지 역세권 조망틔이고 일조권좋은집 , 세끼고 매매
4 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 35000 113 중/25 쌍용공인중개사사무. . 02-962-2244 대단지 역세권 내부 수리 ,거실및 방확장 ,
5 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79A/59 공급면적 79.7㎡ 전용면적 59.98㎡ 55000 101 13/20 미래공인중개사사무. . 02-960-6800 역세권 로얄동, 햇빛 잘 드는 집
6 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79C/59 공급면적 79.18㎡ 전용면적 59.96㎡ 53500 103 12/20 미래공인중개사사무. . 02-960-6800 역세권 확장형 베란다 확장된 깔끔한 집
7 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79A/59 공급면적 79.7㎡ 전용면적 59.98㎡ 54000 102 11/19 미래공인중개사사무. . 02-960-6800 역세권 기본형, 입주 가능
8 매매 17.03.01 아파트전농동 래미안크레시티 래미안크레시티 112A/84 공급면적 112.21㎡ 전용면적 84.96㎡ 62000 207 3/21 금강부동산공인중개. . 02-2245-0006 대단지 확장형 확장형 채광좋음 입주가능
9 매매 17.03.01 아파트답십리동 답십리대우 답십리대우 108/84 공급면적 108.45㎡ 전용면적 84.99㎡ 42000 102 저/21 스마일부동산공인중. . 02-2246-8944 NaN

컬럼 다듬기

'최초게재일' 컬럼에 거래종류와 날짜가 함께 있다. 거래종류는 매매, 전세, 월세 등이 있다. 이 데이터를 둘로 나누어 각각 '거래종류'를 추출하고, '최초게제일'에는 날짜만 남도록 해보자.

Series.str.extract() 에 정규식을 사용하여 매치되는 문자열을 추출할 수 있다.

In [8]:
# '매매 17.03.01' 데이터에 대해,
# 정규식 '(.*) '을 적용하면 '매매'만 추출

result['거래종류'] = result['최초게재일'].str.extract('(.*) ')
result.head(10)
Out[8]:
최초게재일 종류/소재지 단지명 공급/전용(㎡) 매매가(만원) 문의처 비고 거래종류
0 매매 17.03.01 아파트장안동 한신 한신 109C/84 공급면적 109.46㎡ 전용면적 84.4㎡ 37500 102 14/18 동원공인중개사사무. . 02-2216-8600 무융자 로얄층,기본구조,확트인조망굿,주차굿,입주협의 매매
1 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 80B/59 공급면적 80.37㎡ 전용면적 59.9㎡ 54000 103 중/20 백산 공인중개사 02-3291-0088 하루종일 밝고 환한 남향 확장형 매매예요 매매
2 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 34700 101 6/22 쌍용공인중개사사무. . 02-962-2244 급매물 대단지 중랑천조망 , 매매
3 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 34000 115 25/25 쌍용공인중개사사무. . 02-962-2244 대단지 역세권 조망틔이고 일조권좋은집 , 세끼고 매매 매매
4 매매 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 35000 113 중/25 쌍용공인중개사사무. . 02-962-2244 대단지 역세권 내부 수리 ,거실및 방확장 , 매매
5 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79A/59 공급면적 79.7㎡ 전용면적 59.98㎡ 55000 101 13/20 미래공인중개사사무. . 02-960-6800 역세권 로얄동, 햇빛 잘 드는 집 매매
6 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79C/59 공급면적 79.18㎡ 전용면적 59.96㎡ 53500 103 12/20 미래공인중개사사무. . 02-960-6800 역세권 확장형 베란다 확장된 깔끔한 집 매매
7 매매 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79A/59 공급면적 79.7㎡ 전용면적 59.98㎡ 54000 102 11/19 미래공인중개사사무. . 02-960-6800 역세권 기본형, 입주 가능 매매
8 매매 17.03.01 아파트전농동 래미안크레시티 래미안크레시티 112A/84 공급면적 112.21㎡ 전용면적 84.96㎡ 62000 207 3/21 금강부동산공인중개. . 02-2245-0006 대단지 확장형 확장형 채광좋음 입주가능 매매
9 매매 17.03.01 아파트답십리동 답십리대우 답십리대우 108/84 공급면적 108.45㎡ 전용면적 84.99㎡ 42000 102 저/21 스마일부동산공인중. . 02-2246-8944 NaN 매매
In [9]:
# '매매 17.03.01' 데이터에 대해, 
# 정규식 '(\d+.\d+.\d+)'을 적용하여 추출하면 '17.03.01'만 추출

result['최초게재일'] = result['최초게재일'].str.extract('(\d+.\d+.\d+)')
result.head(10)
Out[9]:
최초게재일 종류/소재지 단지명 공급/전용(㎡) 매매가(만원) 문의처 비고 거래종류
0 17.03.01 아파트장안동 한신 한신 109C/84 공급면적 109.46㎡ 전용면적 84.4㎡ 37500 102 14/18 동원공인중개사사무. . 02-2216-8600 무융자 로얄층,기본구조,확트인조망굿,주차굿,입주협의 매매
1 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 80B/59 공급면적 80.37㎡ 전용면적 59.9㎡ 54000 103 중/20 백산 공인중개사 02-3291-0088 하루종일 밝고 환한 남향 확장형 매매예요 매매
2 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 34700 101 6/22 쌍용공인중개사사무. . 02-962-2244 급매물 대단지 중랑천조망 , 매매
3 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 34000 115 25/25 쌍용공인중개사사무. . 02-962-2244 대단지 역세권 조망틔이고 일조권좋은집 , 세끼고 매매 매매
4 17.03.01 아파트이문동 쌍용 쌍용 81/59 공급면적 81.19㎡ 전용면적 59.99㎡ 35000 113 중/25 쌍용공인중개사사무. . 02-962-2244 대단지 역세권 내부 수리 ,거실및 방확장 , 매매
5 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79A/59 공급면적 79.7㎡ 전용면적 59.98㎡ 55000 101 13/20 미래공인중개사사무. . 02-960-6800 역세권 로얄동, 햇빛 잘 드는 집 매매
6 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79C/59 공급면적 79.18㎡ 전용면적 59.96㎡ 53500 103 12/20 미래공인중개사사무. . 02-960-6800 역세권 확장형 베란다 확장된 깔끔한 집 매매
7 17.03.01 아파트용두동 래미안허브리츠 래미안허브리츠 79A/59 공급면적 79.7㎡ 전용면적 59.98㎡ 54000 102 11/19 미래공인중개사사무. . 02-960-6800 역세권 기본형, 입주 가능 매매
8 17.03.01 아파트전농동 래미안크레시티 래미안크레시티 112A/84 공급면적 112.21㎡ 전용면적 84.96㎡ 62000 207 3/21 금강부동산공인중개. . 02-2245-0006 대단지 확장형 확장형 채광좋음 입주가능 매매
9 17.03.01 아파트답십리동 답십리대우 답십리대우 108/84 공급면적 108.45㎡ 전용면적 84.99㎡ 42000 102 저/21 스마일부동산공인중. . 02-2246-8944 NaN 매매

댓글

Comments powered by Disqus