데이터를 편하게 다루고 분석을 잘하기 위해서는
인덱싱을 자유자재로 할 수 있어야 한다.
DataFrame에서 인덱싱을 통해 값을 받아오기 위해서는 loc
메소드를 사용하면 된다.
df.loc[row, column]
한 column에 대한 인덱싱은 컬럼명만으로도 할 수 있다.
df[column]
DataFrame에서 여러 값의 데이터를 인덱싱하는 방법에는 두 가지 방식이 있다.
df[[column1, column2]]
df.loc[:,['SBS','JTBC']]
연속적인 데이터들의 원하는 값만 추출할 때는 슬라이싱을 활용한다.
df.loc[2012:2017]
df.loc[:, 'KBS':'SBS']
df.loc[2012:2017, 'KBS':'SBS']
DataFrame 조건으로 인덱싱
df.loc[df[조건]]
df.loc[(df[조건]) & (df[조건])] # AND
df.loc[(df[조건]) | (df[조건])] # OR
특정 컬럼의 조건을 만족하는 값만 추출
df.loc[조건, '컬럼명']
두 개의 컬럼에 대해서 비교하고 해당 값만 추출
df.loc[df['컬럼명1'] < df['컬럼명2'], ['컬럼명1', '컬럼명2']]
numpy에서 값을 받아오기 위해 값의 인덱스를 이용한 것처럼
pandas에서도 값의 인덱스를 이용하여 인덱싱이 가능함.
df.iloc[로우 인덱스, 컬럼 인덱스]
특정 데이터 값 변경은 인덱싱 해서 새로 값을 입력하면 된다.
df.loc[로우명, 컬럼명] = 값
df.iloc[로우 인덱스, 컬럼 인덱스] = 값
특정 row/column 삭제
df.drop(이름, axis=0, inplace=True)
# axis = 0 행 / 1 열
# inplace = True 기존데이터에서 변경 / False 유지
새로운 row 추가는 인덱싱 후 컬럼별 값들은 리스트로 전달
df.loc[로우명] = [값1, 값2]
DataFrame 컬럼명 변경
df.rename(columns={'기존이름' : '변경할이름', ...})
df.rename(columns={'기존이름' : '변경할이름'}, inpalce=True)
inpalce=True
로 지정하면 기존 데이터프레임에서 변경이 된다.
DataFrame 인덱스명 변경
df.index.name = '변경할 이름'
DataFrame 인덱스 변경
df.set_index('컬럼명')
df.set_index('컬럼명', inpalce=True)
df['새로운 컬럼명'] = df.index
inpalce=True
로 지정하면 기존 데이터프레임에서 변경이 된다.
dataframe의 상위 데이터와 하위 데이터 확인
df.head()
df.tail()
dataframe의 크기 확인
df.shape
dataframe의 컬럼 확인
df.columns
dataframe의 각 컬럼 정보
df.info()
dataframe의 각 컬럼 통계 정보
df.describe()
dataframe의 로우 정렬
df.sort_values(by="기준컬럼")
df.sort_values(by="기준컬럼", ascending=False) # 내림차순
df.sort_values(by="기준컬럼", ascending=False, inplace=True) # 내림차순 # 기존 데이터에서 변경
시리즈 데이터에서 중복된 데이터 제거
df.unique()
시리즈 데이터에서 각 데이터별로 count개수
df.value_counts()
시리즈 데이터 요약 정보
df.describe()
2,000명의 코드잇 대학교 학생들이 수강신청을 했습니다.
수강신청에는 다음 3개의 조건이 있습니다.
1. “information technology” 과목은 심화과목이라 1학년은 수강할 수 없습니다.
2. “commerce” 과목은 기초과목이고 많은 학생들이 듣는 수업이라 4학년은 수강할 수 없습니다.
3. 수강생이 5명이 되지 않으면 강의는 폐강되어 수강할 수 없습니다.
기존 DataFrame에 “status”라는 이름의 column을 추가하고, 학생이 수강 가능한 상태이면 “allowed”, 수강 불가능한 상태이면 “not allowed”를 넣어주세요.
import pandas as pd
df = pd.read_csv('data/enrolment_1.csv')
df["status"] = "allowed"
# 조건 1
boolean1 = df["course name"] == "information technology"
boolean2 = df["year"] == 1
df.loc[boolean1 & boolean2, "status"] = "not allowed"
# 조건 2
boolean3= df["course name"] == "commerce"
boolean4= df["year"] == 4
df.loc[boolean3& boolean4, "status"] = "not allowed"
# 조건 3
allowed = df["status"] == "allowed"
course_counts = df.loc[allowed, "course name"].value_counts()
closed_courses = list(course_counts[course_counts < 5].index)
for course in closed_courses:
df.loc[df["course name"] == course, "status"] = "not allowed"
# 정답 확인
df
조건 1 : “information technology” 과목은 심화과목이라 1학년은 수강할 수 없습니다.
boolean1
에 저장boolean2
에 저장not allowed
값으로 변경조건 2 : “commerce” 과목은 기초과목이고 많은 학생들이 듣는 수업이라 4학년은 수강할 수 없습니다.
boolean3
에 저장boolean4
에 저장not allowed
값으로 변경조건 3 : 수강생이 5명이 되지 않으면 강의는 폐강되어 수강할 수 없습니다.
allowed
상태인 데이터만 따로 저장value_counts()
를 사용하여 각 과목별 신청 인원 확인for
문을 통해 폐강 과목에 해당하는 데이터에 not allowed
값으로 변경수강 신청이 완료되었습니다. 이제 각 과목을 수강하는 학생수에 따라 크기가 다른 강의실을 배치하려고 합니다.
강의실은 규모에 따라 “Auditorium”, “Large room”, “Medium room”, “Small room” 총 4가지 종류가 있습니다.
아래 조건에 따라 강의실 종류를 지정해 주세요.
1. 80명 이상의 학생이 수강하는 과목은 “Auditorium”에서 진행됩니다.
2. 40명 이상, 80명 미만의 학생이 수강하는 과목은 “Large room”에서 진행됩니다.
3. 15명 이상, 40명 미만의 학생이 수강하는 과목은 “Medium room”에서 진행됩니다.
4. 5명 이상, 15명 미만의 학생이 수강하는 과목은 “Small room”에서 진행됩니다.
5. 폐강 등의 이유로 status가 “not allowed”인 수강생은 room assignment 또한 “not assigned”가 되어야 합니다.
import pandas as pd
df = pd.read_csv('data/enrolment_2.csv')
df["room assignment"] = "not assigned"
# 코드를 작성하세요.
allowed = df["status"] == "allowed"
course_counts = df.loc[allowed, "course name"].value_counts()
# 1
auditorium = list(course_counts[course_counts >= 80].index)
for i in auditorium :
df.loc[(df['course name'] == i) & allowed, "room assignment"] = "Auditorium"
# 2
large = list(course_counts[(course_counts >= 40) & (course_counts < 80)].index)
for i in large :
df.loc[(df['course name'] == i) & allowed, "room assignment"] = "Large room"
# 3
medium = list(course_counts[(course_counts >= 15) & (course_counts < 40)].index)
for i in medium :
df.loc[(df['course name'] == i) & allowed, "room assignment"] = "Medium room"
# 4
small = list(course_counts[(course_counts >= 5) & (course_counts < 15)].index)
for i in small :
df.loc[(df['course name'] == i) & allowed, "room assignment"] = "Small room"
# 5
not_allowed = df["status"] == "not allowed"
df.loc[not_allowed, "room assignment"] = "not assigned"
# 정답 출력
df
for
문을 통해 room assignment
값 지정room assignment
값 지정코드잇에서 무료 수강하며 학습한 내용을 정리한 글입니다.