본문 바로가기
Developer/Python

[Python] Pandas로 접근한 데이터 전처리

by Doony 2019. 5. 24.

지난 포스팅에서 Pandas를 이용해 파일을 열고, 저장하는 과정에 대해 알아봤습니다. 이번에는 열린 파일에서 어떻게 데이터를 살펴볼 수 있는지 기초적인 방법에 대해 포스팅해보겠습니다. (데이터셋은 지난 포스팅 참고)
판다스로 열린 파일은 행렬 형태로 보고 접근하면 편합니다.

각종 기능들은 아래와 같습니다. 상황에 맞게 참고하여 사용하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
## 행렬 이름으로 값 보기
 
df.loc[4'education']
 
## 행 이름으로 값 보기
 
df.loc[3,]
 
## 여러 행
 
df.loc[[345], ]
 
## 행 범위
 
df.loc[3:5,]
 
## 열 이름으로 값 보기
 
df.loc[:, 'education']
 
## 여러 열 보기
 
df2 = df.loc[:, ['age''race''education']] 
 
## 열 범위
 
df.loc[:, 'age':'education']
 
## 여러 행렬 범위
 
df.loc[3:5'age':'education']
 
## 행렬 번호로 값 보기
 
df.iloc[33]
 
## 행 번호로 값 보기
 
df.iloc[3, ]
 
## 열 번호로 값 보기
 
df.iloc[:, 3]
cs
  • Query 조건 부여
    특정 컬럼에 해당하는 값의 조건에 따라 필터링할 수 있습니다. 쿼리는 아래와 같이 설정할 수 있습니다. 쿼리를 사용하면, numpy를 이용해 Array에서 특정 행을 삭제하는 과정 없이, 바로 쿼리로 필터링된 데이터를 얻을 수 있습니다. (np.drop 불필요)

    1
    2
    3
    4
    df.query('age < 20')
    df.query('education_num >= 14 and hours_per_week < 50')
    df.query('education in [" Doctorate", " Masters"]')
    df.query('education not in [" Doctorate", " Masters"]')
    cs

이와 같이 파이썬 기본 문법을 활용하여 다양하게 적용이 가능합니다.
그 외 최대최소, 평균 등의 연산은 다음과 같이 직관적으로 얻을 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
## 합계
 
df['age'].sum()
 
## 평균
 
df['age'].mean()
 
## 최소
 
df['age'].min()
 
## 최대
 
df['age'].max()
 
## 중간값
 
df['age'].median()
 
## 최빈값
 
df['education'].mode()
 
## 값의 종류
 
df['education'].unique()
 
## 값의 종류의 개수
 
df['education'].nunique()
 
## 종류별 개수
 
df['education'].value_counts()
cs

다음은 데이터의 정렬입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
## 정렬 (오름차순)
 
df.sort_values('age').head()
 
## 정렬 (내림차순)
 
df.sort_values('age', ascending=False).head()
 
## 다중 정렬
 
df.sort_values(['age''hours_per_week']).head()
 
## 다중정렬 (오름/내림차순)
 
df.sort_values(['age''hours_per_week'], ascending=[False, True]).head()
 
## 피봇 테이블
 
pd.pivot_table(df, 
               columns='sex'
               index='race'
               values='capital_gain',
               aggfunc='mean')
cs

댓글