Post

[Pandas 기초] 3. DataFrame 조회

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

  • 보고자 하는 데이터를 즉시 조회할 수 있도록 반복 학습과 실습을 통해 익숙해져야 함
  • 데이터프레임을 대상으로 조회하는 방법은 다양하다.
  • 그 중 한가지 방법을 선택해 일관되게 사용하기를 권고

1. 특정 열 조회

  • df.loc[:, [열 이름1, 열 이름2, ... ]] 형태로 조회할 열 이름을 리스트로 지정
  • 열부분은 생략할 수 있지만, 행 부분을 생략할 수는 없다.
  • 하지만 df[[열 이름1, 열 이름2, ...]] 형태로 인덱서를 생략함이 일반적이다.
  • 조회할 열이 하나면 리스트 형태가 아니어도 된다.
1
2
# Attrition 열 조회 : 시리즈로 조회 (조금 더 권장하는 방법)
data['Attrition']
1
2
3
4
5
6
7
8
9
10
11
12
0       0
1       0
2       0
3       0
4       1
       ..
1191    0
1192    0
1193    0
1194    0
1195    0
Name: Attrition, Length: 1196, dtype: int64
1
2
# Attrition 열 조회2 : 시리즈로 조회 (오류 발생 가능성 있음)
data.Attrition
1
2
3
4
5
6
7
8
9
10
11
12
0       0
1       0
2       0
3       0
4       1
       ..
1191    0
1192    0
1193    0
1194    0
1195    0
Name: Attrition, Length: 1196, dtype: int64
1
2
3
# Attrition, Age 열 조회 : 데이터프레임으로 조회
# 대괄호 안에 리스트!!!
data[['Attrition', 'Age' ]]
AttritionAge
0033
1035
2042
3046
4122
.........
1191032
1192027
1193029
1194029
1195043

1196 rows × 2 columns

2. 조건으로 조회

  • df.loc[조건] 형태로 조건을 지정해 조건에 만족하는 데이터만 조회할 수 있다.
  • 우선 조건이 제대로 판단이 되는지 확인한 후, 그 조건을 대괄호 안에 넣으면 된다.

단일 조건 조회

1
2
# 조건절(조건문)의 결과는 True, False
data['DistanceFromHome'] > 10
1
2
3
4
5
6
7
8
9
10
11
12
0       False
1        True
2       False
3       False
4       False
        ...  
1191    False
1192     True
1193    False
1194    False
1195     True
Name: DistanceFromHome, Length: 1196, dtype: bool
1
2
# DistanceFromHome 열 값이 10 보다 큰 행 조회
data.loc[data['DistanceFromHome'] > 10]
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
1035181412Male4Single9362No1110
5024211551Male1Divorced2296No142
7030201084Male1Married9957No157
1113315582Male3Married13610Yes1215
150342360Male3Single4568No2010
....................................
1181035281596Male3Married3407No1710
1186126201818Female2Married2148Yes116
1188029191497Male3Divorced8620No1410
1192027191619Male1Divorced4066No117
119504316327Female4Married16064Yes2222

363 rows × 11 columns

여러 조건 조회

1
2
# and로 여러 조건 연결
data.loc[(data['DistanceFromHome'] > 10) & (data['JobSatisfaction'] == 4)]
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
1035181412Male4Single9362No1110
5002915346Male4Single2340No196
51045281546Male4Married2132No208
64032151955Female4Divorced6667No189
82135121667Male4Single4581Yes2413
....................................
1104034191701Female4Married2929No1210
1126035111137Male4Divorced4968No115
114114911840Female4Married7654No189
1148036181133Male4Single7779No2018
119504316327Female4Married16064Yes2222

107 rows × 11 columns

1
2
# or 조건 : |
data.loc[(data['DistanceFromHome'] > 10) | (data['JobSatisfaction'] == 4)]
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
1035181412Male4Single9362No1110
5024211551Male1Divorced2296No142
7030201084Male1Married9957No157
80266686Female4Married2659Yes133
1113315582Male3Married13610Yes1215
....................................
1186126201818Female2Married2148Yes116
1188029191497Male3Divorced8620No1410
11900275844Male4Divorced12808Yes169
1192027191619Male1Divorced4066No117
119504316327Female4Married16064Yes2222

629 rows × 11 columns

isin(), between()

  • isin([값1, 값2, ..., 값n]) : 값1 또는 값2 또는 .. 값n 인 데이터만 조회
  • 주의 : isin(리스트) 값들을 리스트 형태로 입력해야 한다.
1
2
# 값 나열
data.loc[data['JobSatisfaction'].isin([1,4])]
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
1035181412Male4Single9362No1110
204261911Male1Married13348No1318
304621204Female1Married17048No2328
5024211551Male1Divorced2296No142
7030201084Male1Married9957No157
....................................
118403351395Male4Married9998No138
1185024101746Male4Married2145No143
11900275844Male4Divorced12808Yes169
1192027191619Male1Divorced4066No117
119504316327Female4Married16064Yes2222

616 rows × 11 columns

  • 위 구문은 다음과 같은 의미를 갖는다.
1
2
# or 조건
data.loc[(data['JobSatisfaction'] == 1) | (data['JobSatisfaction'] == 4)]
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
1035181412Male4Single9362No1110
204261911Male1Married13348No1318
304621204Female1Married17048No2328
5024211551Male1Divorced2296No142
7030201084Male1Married9957No157
....................................
118403351395Male4Married9998No138
1185024101746Male4Married2145No143
11900275844Male4Divorced12808Yes169
1192027191619Male1Divorced4066No117
119504316327Female4Married16064Yes2222

616 rows × 11 columns

  • between(값1, 값2) : 값1 ~ 값2 까지 범위안의 데이터만 조회
1
2
# 범위 지정
data.loc[data['Age'].between(25, 30)]
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
7030201084Male1Married9957No157
80266686Female4Married2659Yes133
160305197Female1Divorced3204No148
2802611893Female3Married2933Yes131
3203071224Male3Divorced3491No1310
....................................
1188029191497Male3Divorced8620No1410
11900275844Male4Divorced12808Yes169
1192027191619Male1Divorced4066No117
119302991558Male3Married2451No185
11940292469Male3Married4649No144

238 rows × 11 columns

  • 위 구문은 다음과 같은 의미를 갖는다.
1
2
# and 조건
data.loc[(data['Age'] >= 25) & (data['Age'] <= 30)]
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
7030201084Male1Married9957No157
80266686Female4Married2659Yes133
160305197Female1Divorced3204No148
2802611893Female3Married2933Yes131
3203071224Male3Divorced3491No1310
....................................
1188029191497Male3Divorced8620No1410
11900275844Male4Divorced12808Yes169
1192027191619Male1Divorced4066No117
119302991558Male3Married2451No185
11940292469Male3Married4649No144

238 rows × 11 columns

조건을 만족하는 행의 일부 열 조회

  • df.loc[조건, ['열 이름1', '열 이름2', ...]] 형태로 조회할 열을 리스트로 지정 => 2차원, 데이터프레임 형태로 조회
1
2
# 조건에 맞는 하나의 열 조회
data.loc[data['MonthlyIncome'] >= 10000, ['Age']]
Age
033
242
346
1133
1339
......
115742
115854
116634
119027
119543

230 rows × 1 columns

1
2
# 조건에 맞는 여러 열 조회
data.loc[data['MonthlyIncome'] >= 10000, ['Age', 'MaritalStatus', 'TotalWorkingYears']]
AgeMaritalStatusTotalWorkingYears
033Married14
242Married18
346Married28
1133Married15
1339Single21
............
115742Single24
115854Married36
116634Single14
119027Divorced9
119543Married22

230 rows × 3 columns

연습문제

  • MaritalStatus 가 Single 이고, 나이가 30~40 인 직원을 월급순으로 정렬 (내림차순)
1
data.loc[(data['MaritalStatus'] == 'Single') & (data['Age'].between(30, 40))].sort_values(['MonthlyIncome'], ascending=False)
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
109204071740Male2Single19833No1421
467040141128Male3Single19626No1421
1303992022Male4Single19431No1321
26503181430Female2Single16422No119
42004091166Female3Single13499No1720
....................................
460363238Male2Single2088No1213
56803671659Male2Single2013No1115
2613221692Male2Single1393No121
30113181433Female2Single1261No121
111813091876Male4Single1081No131

175 rows × 11 columns

기타

[1] loc와 iloc

  • loc는 index 이름, iloc는 index number 기준으로 탐색
1
2
s = pd.Series(np.nan, index=[49,48,47,46,45, 1, 2, 3, 4, 5])
s.loc[:3]
1
2
3
4
5
6
7
8
9
49   NaN
48   NaN
47   NaN
46   NaN
45   NaN
1    NaN
2    NaN
3    NaN
dtype: float64
1
s.iloc[:3]
1
2
3
4
49   NaN
48   NaN
47   NaN
dtype: float64

[2] isnull()

  • column 또는 row 값의 NaN(null) 값의 index를 반환함
1
data.isnull().head()
AttritionAgeDistanceFromHomeEmployeeNumberGenderJobSatisfactionMaritalStatusMonthlyIncomeOverTimePercentSalaryHikeTotalWorkingYears
0FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
1FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
2FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
3FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
4FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
1
data.isnull().sum()
1
2
3
4
5
6
7
8
9
10
11
12
Attrition            0
Age                  0
DistanceFromHome     0
EmployeeNumber       0
Gender               0
JobSatisfaction      0
MaritalStatus        0
MonthlyIncome        0
OverTime             0
PercentSalaryHike    0
TotalWorkingYears    0
dtype: int64

[3] 기타 메소드

  • df.T : Transpose
  • df.values : 값 출력
  • df.to_csv() : csv 변환
  • del df["debt"] : column 삭제
  • df.cumsum() : 누적 합
  • df.cummax() : 누적 최대
  • df.cummin() : 누적 최소
This post is licensed under CC BY 4.0 by the author.

[Pandas 기초] 2. DataFrame 탐색

[Pandas 기초] 4. DataFrame 집계