1. 판다스란?
- 파이썬에서 데이터 처리를 위한 라이브러리
- 리스트, 넘파이 등의 내부 데이터 뿐만 아니라 CSV 파일을 쉽게 DataFrame 으로 변경 가능
- 용어
- DataFrame: 여러 개의 행과 열로 이뤄진 2차원 데이터를 담은 데이터 구조체
- Index: 개별 데이터를 고유하게 식별하는 Key값
- Series: 칼럼이 하나뿐인 데이터 구조체
2. 판다스 API
- read_csv
- CSV 파일의 포맷을 DataFrame 으로 변환.
- 칼럼 구분 문자 → 점 (.)
- 디폴트 필드 구분 문자 → 콤마 (,)
- 다른 구분 문자 기반의 파일 포맷도 변환 가능
read_csv(’파일명’, sep=’/t’)
- CSV 파일의 포맷을 DataFrame 으로 변환.
- read_table
- 필드 구분 문자 → 탭 (\t)
- read_fwf
- 고정 길이 기반의 칼럼 포맷을 DataFrame으로 로딩하기 위한 API
- head(n)
- 맨 앞 n개의 row반환
- shape
- 행과 열의 크기
- info
- 총 데이터 건수, 데이터 타입, Null 건수info
- describe
- 칼럼별 숫자형 데이터 값의 n-percentile 분포도, 평균값, 최댓값, 최솟값
- object 타입은 포함하지 않는다
- DataFrame[’칼럼명’]
- series 형태로 특정 column 데이터 세트가 반환된다.
- value_counts()
- column값의 유형과 건수를 확인할 수 있다.


titanic_df['Pclass'].value_counts()
- Series(→ Index와 단 하나의 칼럼으로 구성된 데이터 세트) 에서만 사용 가능
- DataFrame 에서는 사용 불가능
3. DataFrame 과 ndarray 상호 변환
- DataFrame은 리스트, 넘파이, ndarray와 다르게 칼럼명 필요
3.1 ndarray, 리스트, 딕셔너리→ DataFrame
🥧 1차원
col_name1=['칼럼 이름']
list=[1,2,3]
array1=np.array(list1)
#넘파이 ndarray를 이용해 DataFrame생성
df_array1=pd.DataFrame(array1, columns=col_name1)
🥧 2차원
# 3개의 칼럼명이 필요함
col_name2 = ['col1', 'col2', 'col3']
# 리스트
list2 = [[1, 2, 3],
[11, 12, 13]]
# DataFrame으로 변환
df_list2 = pd.DataFrame(list2, columns=col_name2)
🥧 딕셔너리
- key는 칼럼명, value 는 각 칼럼 데이터가 된다.
dict = {'col1':[1, 11], 'col2':[2, 22], 'col3':[3, 33]}
df_dict = pd.DataFrame(dict)
3.2 DataFrame → ndarray, 리스트, 딕셔너리
🥧 ndarray
- values 이용
df_dict.values
🥧 리스트 / 딕셔너리
- tolist / to_dict 이용
df_dict.values.tolist() # 리스트로
df_dict.to_dict('list') # 딕셔너리가 리스트형으로 반환
4. 칼럼 데이터 생성, 수정, 삭제
4.1 생성, 수정
- DataFrame[’칼럼명’] = 일괄적으로 할당되는 값 혹은 계산 식
titanic_df['Age_0']=0
titanic_df['Family_No'] = titanic_df['SibSp'] + titanic_df['Parch']+1
4.2 삭제
drop
DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
- 🥧 axis
- labels에 원하는 칼럼명 & axis=1 입력하면 지정된 칼럼 드롭
- titanic_drop_df = titanic_df.drop('Age_0', axis=1 )
- axis=0을 입력하면 로우 축 방향으로 드롭
- 🥧 inplace
- False이면 자기 자신의 DataFrame의 데이터는 삭제하지 않으며, 삭제된 결과는 별도의 새로운 DataFrame으로 반환.
- True이면 원본 DataFrame에 드롭된 결과 적용된다.
5. Index 객체
- 레코드를 고유하게 식별하는 객체
- Index는 오직 식별용으로만 사용되기 때문에 Series 객체에 연산 함수 적용할 때 Index는 연산에서 제외된다.
5.1 Index 객체 추출
- ndarray와 유사하게 단일 값 반환 및 슬라이싱 가능
indexes = titanic_df.index
indexes[:5].values # [0 1 2 3 4]
5.2 reset_index
- 연속 숫자형으로 새롭게 인덱스를 할당
- 기존 인덱스는 index 라는 새로운 칼럼명으로 추가된다.
- drop=True 설정하면 새로 추가되지 않고 삭제된다.
6. 데이터 셀렉션 및 필터링
6.1 DataFrame의 [ ] 연산자
- 넘파이나 Series의 [ ]와 다르다!
- 칼럼명만 지정할 수 있다.
titanic_df[ ['Survived', 'Pclass'] ]
titanic_df[0] #오류
- 슬라이싱 및 불린 인덱싱은 가능
titanic_df[0:2]
titanic_df[ titanic_df['Pclass'] == 3]
6.2 명칭 기반 인덱싱 / 위치 기반 인덱싱
🥧 명칭 기반 인덱싱
- 칼럼 명으로 열 위치 지정
🥧 위치 기반 인덱싱
- 행, 열 값으로 정수
6.4 iloc[]
- 위치 기반 인덱싱
- 행과 열 값으로 정수형 또는 슬라이싱, 랜시 리스트 값 입력
data_df.iloc[0, 0] # Chulmin
data_df.iloc[0, 'Name'] # 오류
6.5 loc[]
- 명칭 기반 인덱싱
- 행 → DataFrame index 값
- 열→ 칼럼 명
data_df.loc['one', 'Name'] # Chulmin
6.6 불린 인덱싱
DataFrame[조건]
titanic_df[ (titanic_df['Age'] > 60) & (titanic_df['Pclass']==1) & (titanic_df['Sex']=='female')]
7 .정렬
7.1 sort_values
- by
- 특정 칼럼 입력하면 해당 칼럼으로 정렬
titanic_df.sort_values(by=['Name']) - ascending
- ascending=True : 오름차순
- False : 내림차순
- inplace
- inplace=False : 호출한 DataFrame은 그대로 유지하며 정렬도니 DataFrame을 결과로 반환
7.2 Aggregation 함수
- min, max, sum, count 함수
7.3 groupby
- 입력 파라미터 by에 칼럼을 입력하면 대상 칼럼으로 groupby 된다.
- SQL과 다르게 DataFrame에 groupby를 호출해 반환된 결과에 agggreagation 함수를 호출하면 groupby 대상 칼럼을 제외한 모든 칼럼에 해당 aggregation 함수를 적용
- 객체에 해당 칼럼을 필터링한 뒤 aggregation 함수 적용해야 한다.
titanic_df.groupby('Pclass')[['PassengerId', 'Survived']].count()
8. 결손 데이터 처리
머신러닝 알고리즘은 NaN 값 처리하지 않는다.
8.1 isna - 결손 데이터 여부 확인
titanic_df.isna().head(3)
8.2 filna - 결손 데이터 대체
# age 칼럼의 NaN 값은 평균 나이로 대체
titanic_df['Age'] = titanic_df['Age'].fillna(titanic_df['Age'].mean())
# Embarked 칼럼의 NaN 값은 'S' 로 대체
titanic_df['Embarked'] = titanic_df['Embarked'].fillna('S')
9. apply lambda - 데이터 가공
9.1 lambda 식

9.2 DataFrame의 lambda 식
titanic_df['Name_len']= titanic_df['Name'].apply(lambda x : len(x))
9.2 if else

- if 절의 경우 if 식보다 반환 값을 먼저 기술해야 한다.