Post

[Pandas 기초] 2. DataFrame 탐색

Python Library 중 하나인 Pandas에서 DataFrame을 탐색하는 방법을 알아보자.

  • 파일에서 불러온 데이터의 크기, 내용, 분포, 누락된 값 등을 확인
  • 확인된 내용을 통해 데이터 전처리 필요 여부를 결정
  • 데이터를 알아야 데이터를 분석할 수 있다!

[참고] 자주 사용할 만한 메서드들

  • head(): 상위 데이터 확인
  • tail(): 하위 데이터 확인
  • shape: 데이터프레임 크기
  • index: 인덱스 정보 확인
  • values: 값 정보 확인
  • columns: 열 정보 확인
  • dtypes: 열 자료형 확인
  • info(): 열에 대한 상세한 정보 확인
  • describe(): 기초통계정보 확인

1. 상위, 하위 일부 데이터, 크기 확인

  • head(n), tail(n) 메소드를 사용해 앞 뒤 데이터를 확인
  • 개수를 지정하지 않으면 기본적으로 5개 행이 조회 됨

상위 데이터 확인

1
data.head()
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
00337817Male3Married11691No1114
1035181412Male4Single9362No1110
204261911Male1Married13348No1318
304621204Female1Married17048No2328
41224593Male3Single3894No164

하위 데이터 확인

1
data.tail(3)
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
119302991558Male3Married2451No185
11940292469Male3Married4649No144
119504316327Female4Married16064Yes2222

크기 확인 .shape

  • (rows, cols) 값을 갖는 튜플 형태로 확인이 가능
  • 데이터를 분석할 때 처리할 데이터 양을 확인하는 목적으로 많이 사용
1
data.shape
1
(1196, 11)

2. 열, 행 정보 보기

열 확인

1
2
3
print(data.columns)
print()
print(data.columns.values) # np array 형태
1
2
3
4
5
6
7
8
Index(['Attrition', 'Age', 'DistanceFromHome', 'EmployeeNumber', 'Gender',
       'JobSatisfaction', 'MaritalStatus', 'MonthlyIncome', 'OverTime',
       'PercentSalaryHike', 'TotalWorkingYears'],
      dtype='object')

['Attrition' 'Age' 'DistanceFromHome' 'EmployeeNumber' 'Gender'
 'JobSatisfaction' 'MaritalStatus' 'MonthlyIncome' 'OverTime'
 'PercentSalaryHike' 'TotalWorkingYears']
1
2
# 데이터프레임을 리스트 함수에 넣으면 열 이름이 리스트로 반환됨.
list(data)
1
2
3
4
5
6
7
8
9
10
11
['Attrition',
 'Age',
 'DistanceFromHome',
 'EmployeeNumber',
 'Gender',
 'JobSatisfaction',
 'MaritalStatus',
 'MonthlyIncome',
 'OverTime',
 'PercentSalaryHike',
 'TotalWorkingYears']

자료형 확인

  • int64: 정수형 데이터(int)
  • float64: 실수형 데이터(float)
  • object: 문자열 데이터(string)
1
data.dtypes
1
2
3
4
5
6
7
8
9
10
11
12
Attrition             int64
Age                   int64
DistanceFromHome      int64
EmployeeNumber        int64
Gender               object
JobSatisfaction       int64
MaritalStatus        object
MonthlyIncome         int64
OverTime             object
PercentSalaryHike     int64
TotalWorkingYears     int64
dtype: object
1
2
# 열 자료형, 값 개수 확인
data.info()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1196 entries, 0 to 1195
Data columns (total 11 columns):
 #   Column             Non-Null Count  Dtype 
---  ------             --------------  ----- 
 0   Attrition          1196 non-null   int64 
 1   Age                1196 non-null   int64 
 2   DistanceFromHome   1196 non-null   int64 
 3   EmployeeNumber     1196 non-null   int64 
 4   Gender             1196 non-null   object
 5   JobSatisfaction    1196 non-null   int64 
 6   MaritalStatus      1196 non-null   object
 7   MonthlyIncome      1196 non-null   int64 
 8   OverTime           1196 non-null   object
 9   PercentSalaryHike  1196 non-null   int64 
 10  TotalWorkingYears  1196 non-null   int64 
dtypes: int64(8), object(3)
memory usage: 102.9+ KB

기초통계정보 확인

  • describe() 메소드는 데이터에 대한 많은 정보를 제공하는 매우 중요한 메소드이다.
  • 개수(count), 평균(mean), 표준편차(std), 최솟값(min), 사분위값(25%, 50%, 75%), 최댓값(max)을 표시한다.
1
data.describe()
AttritionAgeDistanceFromHomeEmployeeNumberJobSatisfactionMonthlyIncomePercentSalaryHikeTotalWorkingYears
count1196.0000001196.000001196.0000001196.0000001196.0000001196.0000001196.0000001196.000000
mean0.16304336.943989.2583611035.6295992.7165556520.10451515.25167211.330268
std0.3695609.092708.166016604.3401301.1109624665.9022533.6259467.823821
min0.00000018.000001.0000001.0000001.0000001009.00000011.0000000.000000
25%0.00000030.000002.000000507.7500002.0000002928.25000012.0000006.000000
50%0.00000036.000007.0000001028.0000003.0000004973.50000014.00000010.000000
75%0.00000043.0000014.0000001581.2500004.0000008420.50000018.00000015.000000
max1.00000060.0000029.0000002068.0000004.00000019999.00000025.00000040.000000
  • 일부 열에 대해서만 기초통계정보를 확인할 수 있다.
1
print(data[['Age', 'MonthlyIncome']].describe())
1
2
3
4
5
6
7
8
9
              Age  MonthlyIncome
count  1196.00000    1196.000000
mean     36.94398    6520.104515
std       9.09270    4665.902253
min      18.00000    1009.000000
25%      30.00000    2928.250000
50%      36.00000    4973.500000
75%      43.00000    8420.500000
max      60.00000   19999.000000

3. 정렬해서 보기

  • 인덱스를 기준으로 정렬하는 방법과 특정 열을 기준으로 정렬하는 방법이 있다.
  • sort_values() 메소드로 특정 열을 기준으로 정렬.
  • ascending 옵션을 설정해 오름차순, 내림차순을 설정할 수 있다.
    • ascending=True: 오름차순 정렬(기본값)
    • ascending=False: 내림차순 정렬
1
data.sort_values(by='MonthlyIncome', ascending=False)
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
2400521259Male3Married19999No1434
23404171035Female3Divorced19973No2221
32205641191Female1Divorced19943No1328
53005011226Female2Single19926No1521
5321552787Male1Married19859Yes1324
....................................
150129241928Male1Single1091No171
111813091876Male4Single1081No131
709028101056Male2Married1052No221
86201851012Male4Single1051No150
9112010701Male3Single1009Yes111

1196 rows × 11 columns

1
2
# 복합 열 정렬
data.sort_values(by=['JobSatisfaction', 'MonthlyIncome'], ascending=[True, False])
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
32205641191Female1Divorced19943No1328
5321552787Male1Married19859Yes1324
27305811423Female1Married19701Yes2132
4180607549Female1Married19566No1133
6850545522Male1Married19406No1124
....................................
19703121974Female4Divorced1129Yes111
386125241273Male4Single1118Yes141
6841192243Male4Single1102No221
111813091876Male4Single1081No131
86201851012Male4Single1051No150

1196 rows × 11 columns

1
2
3
# 복합 열 정렬 : 별도로 저장하고, 인덱스 reset
temp = data.sort_values(by=['JobSatisfaction', 'MonthlyIncome'], ascending=[True, False])
temp.reset_index(drop = True)
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
005641191Female1Divorced19943No1328
11552787Male1Married19859Yes1324
205811423Female1Married19701Yes2132
30607549Female1Married19566No1133
40545522Male1Married19406No1124
....................................
119103121974Female4Divorced1129Yes111
1192125241273Male4Single1118Yes141
11931192243Male4Single1102No221
119413091876Male4Single1081No131
119501851012Male4Single1051No150

1196 rows × 11 columns

4. 기본 집계

  • 데이터를 좀 더 이해하기 위해 고유값, 합, 평균, 최댓값, 최솟값 등을 확인.

    고유값 확인

  • 범주형 열(열이 가진 값이 일정한 경우, 성별, 등급 등)인지 확인할 때 사용.

고유값 확인

  • unique() 메소드로 고유값을 확인하며, 결과값은 배열 형태
1
2
# MaritalStatus 열 고유값 확인
print(data['MaritalStatus'].unique())
1
['Married' 'Single' 'Divorced']

고유값과 개수 확인

  • value_counts() 메소드로 고유값과 그 개수를 확인하며, 결과값은 시리즈 형태
1
2
# MaritalStatus 열 고유값 개수 확인
print(data['MaritalStatus'].value_counts())
1
2
3
4
Married     548
Single      384
Divorced    264
Name: MaritalStatus, dtype: int64

기본 집계 메소드 사용

  • 데이터를 1차 집계 한 후 분석을 진행하는 경우가 많으므로 필히 알아두어야 하는 내용
  • 이후에 배우는 Groupby 기능에서 같이 사용됨
1
2
# MonthlyIncome 열 합계 조회
print(data['MonthlyIncome'].sum())
1
7798045
1
2
# MonthlyIncome 열 최댓값 조회
print(data['MonthlyIncome'].max())
1
19999
1
2
# 'Age', 'MonthlyIncome' 열 평균값 확인
print(data[['Age', 'MonthlyIncome']].mean())
1
2
3
Age                36.943980
MonthlyIncome    6520.104515
dtype: float64
1
2
# 'Age', 'MonthlyIncome' 열 중앙값 확인
print(data[['Age', 'MonthlyIncome']].median())
1
2
3
Age                36.0
MonthlyIncome    4973.5
dtype: float64
This post is licensed under CC BY 4.0 by the author.

[Pandas 기초] 1. DataFrame 생성 및 불러오기

[Pandas 기초] 3. DataFrame 조회