PANDAS로 데이터 조작하기(1)

데이터 분석에 있어 80% 이상이 데이터를 다듬고 준비하는 과정입니다. Pandas 라이브러리는 이러한 과정을 잘 수행할 수 있도록 도와줍니다.

Chapter 01에서 배울 내용

  1. DataFrame: Pandas의 기본 데이터 형태
  2. DataFrame 합치기
  3. DataFrame 정보 요약하기
  4. DataFrame의 열(column) 선택하기
  5. DataFrame의 행(row) 선택하기(basic)
  6. DataFrame의 행(row) 선택하기(filtering)
  7. 분류하기(Sorting)
  8. DataFrame 통계 기술하기
  9. 데이터 질 평가(quality check)
  10. 행 이름 수정하기
  11. 이상치(outlier) 처리하기
  12. 파일 불러오기/내보내기

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

 

Write your comment Here