PANDAS로 데이터 조작하기(1)
데이터 분석에 있어 80% 이상이 데이터를 다듬고 준비하는 과정입니다. Pandas 라이브러리는 이러한 과정을 잘 수행할 수 있도록 도와줍니다.
Chapter 01에서 배울 내용
- DataFrame: Pandas의 기본 데이터 형태
- DataFrame 합치기
- DataFrame 정보 요약하기
- DataFrame의 열(column) 선택하기
- DataFrame의 행(row) 선택하기(basic)
- DataFrame의 행(row) 선택하기(filtering)
- 분류하기(Sorting)
- DataFrame 통계 기술하기
- 데이터 질 평가(quality check)
- 행 이름 수정하기
- 이상치(outlier) 처리하기
- 파일 불러오기/내보내기
Data structure
Series 모든 데이터 타입을 담을 수 있는 1차원의 행렬(array)입니다. 각각의 라벨은 index로 접근할 수 있으며 Pandas에서는 pd.Series([1,3,5,np.nan,6,8])과 같이 생성할 수 있습니다.
Data frame 데이터 프레임은 각 열마다 서로 다른 타입의 데이터를 담을 수 있는 2차원 데이터 구조입니다. SQL table이나 Series 객체의 딕셔너리 형태를 생각하면 됩니다. R에서는 data.frame() 객체와 대응됩니다.
01 Create DataFrame
columns = ['name', 'age', 'gender', 'job'] user1 = pd.DataFrame([['alice', 19, "F", "student"], ['john', 26, "M", "student"]], columns=columns) user2 = pd.DataFrame([['eric', 22, "M", "student"], ['paul', 58, "F", "manager"]], columns=columns) user3 = pd.DataFrame(dict(name=['peter', 'julie'], age=[33, 44], gender=['M', 'F'], job=['engineer', 'scientist']))
02 Combining DataFrames
Concatenate DataFrame
user1.append(user2) users = pd.concat([user1, user2, user3]) print(users)
Out:
age gender job name 0 19 F student alice 1 26 M student john 0 22 M student eric 1 58 F manager paul 0 33 M engineer peter 1 44 F scientist julie |
Join DataFrame
user4 = pd.DataFrame(dict(name=['alice', 'john', 'eric', 'julie'], height=[165, 180, 175, 171]))
* merge
merge1 = pd.merge(users, user4, on="name") merge2 = pd.merge(users, user4, on="name", how='outer')
Out:
merge1: age gender job name height 0 19 F student alice 165 1 26 M student john 180 2 22 M student eric 175 3 44 F scientist julie 171merge2(=users): age gender job name height 0 19 F student alice 165.0 1 26 M student john 180.0 2 22 M student eric 175.0 3 58 F manager paul NaN 4 33 M engineer peter NaN 5 44 F scientist julie 171.0 |
Reshaping by pivoting
“Unpivoting”은 wide한 데이터프레임을 long(stacked) 형태로 바꾸는 것을 의미합니다. 이때 id_vars는 새로운 데이터 프레임의 기준이 되는 변수를 뜻합니다. var_name과 value_name은 해당 열의 이름을 의미합니다.
staked = pd.melt(users, id_vars="name", var_name="variable", value_name="value")
Out:
name variable value 0 alice age 19 1 john age 26 2 eric age 22 3 paul age 58 4 peter age 33 5 julie age 44 6 alice gender F 7 john gender M 8 eric gender M 9 paul gender F 10 peter gender M 11 julie gender F 12 alice job student 13 john job student 14 eric job student 15 paul job manager 16 peter job engineer 17 julie job scientist 18 alice height 165 19 john height 180 20 eric height 175 21 paul height NaN 22 peter height NaN 23 julie height 171 |
“Pivoting”은 long(stacked) 형태의 데이터를 wide한 데이터 포맷으로 바꾸는 것을 의미합니다. index는 기준이 될 열을 의미하고 columns는 각 열의 이름, values는 각 열의 데이터 값을 의미합니다.
staked.pivot(index='name', columns='variable', values='value')
03 Summarizing
# examine the users data users # print the first 30 and last 30 rows type(users) # DataFrame users.head() # print the first 5 rows users.tail() # print the last 5 rows users.index # "the index" (aka "the labels") users.columns # column names (which is "an index") users.dtypes # data types of each column users.shape # number of rows and columns users.values # underlying numpy array users.info() # concise summary (includes memory usage as of pandas 0.15.0