-
[Pandas] Pandas를 통한 데이터 전처리Data Science/Pandas & Numpy&Scikit-learn 2022. 9. 13. 23:15반응형
1. Pandas 인스톨 및 import
pip install pandas
import pandas as pd # as pd의 의미는 앞으로 pandas를 pd라는 약자로 부르겠다
2. 데이터프레임 생성
2.1 파일로부터 데이터프레임 생성
df = pd.read_csv("파일위치/파일이름.csv")
인자이름 기본값 변경가능값 의미 sep ',' 구분자로 사용할 문자열 컬럼간 구분자
csv의 구분자인 ','가 기본값이다header 'infer' None 파일에 항목이름(column)이 없을경우 None으로 설정 names 없음 항목이름 리스트 읽어오는 데이터의 항목이름 설정 usecols None 항목이름 리스트 지정된 항목만 읽어옴 df = pd.read_csv('myfile.txt', header=None, delimiter='\t', names=['id','name','score']) # myfile.txt를 읽어온다 # header는 없다 # 구분자는 '\t'으로 한다 # 데이터 항목 이름은 id, name, score으로 한다
2.2 딕셔너리로부터 데이터프레임 생성
dic = { "name": ["Kim", "Lee", "Youn"], "age": [26, 45, 20], "car": [True, False, False] } df = pd.DataFrame(dic)
2.3 리스트로부터 데이터프레임 생성
lst = [[ "Kim", 26, True ], ["Lee", 45, False], ["Youn", 20, False]] titles = ['name', 'age', 'car'] df = pd.DataFrame(lst, columns=titles)
3. 데이터프레임 정보 확인하기
# 더미데이터 dic = { "name": ["Kim", "Lee", "Youn", "Hong", "Kang"], "age": [26, 45, 20, None, 37], "car": [True, False, False, True, False], "family": [2,3,4,4,3] } df = pd.DataFrame(dic)
3.1 info
df.info() #Range Index : 5 entries, 0 to 4 => 5개의 행이 있으며 인덱스는 0부터 4이다 #Data columns (total 4 columns) => 데이터 열(컬럼)은 총 4개 있다 #Column => 컬럼 이름 #Non-Null Count => Nan이 아닌 값의 수 #Dtype => 데이터 타입 종류
3.2 describe
df.describe()
3.3 Count
주어진 데이터프레임의 전체 또는 특정 열에 대해서 개수 반환
df.value_counts()
df['car'].value_counts()
3.4 Unique
df['car'].unique()
4. 정렬
df.sort_values(by='age',ascending=False) # age 컬럼을 기준으로 정렬 # ascending=False는 내림차순을 의미(True는 오름차순)
df.sort_index(ascending=False) # 인덱스를 기준으로 정렬
df.sort_index(axis=1) # axis=1이기 때문에 좌측의 인덱스가 아닌 컬럼기준 정렬
5. 데이터 행/열 선택
5.1 열 선택
# 여러방법을 통해서 불러올 수 있다 df['name'] df.name df.loc[:,'name'] # 다중 열 선택 df[['name','age']] df.loc[:,['name','age']]
5.2 행 선택
# 하나의 행만 불러오기 df.name[0] # 인덱스 1~3 불러오기 df.loc[1:3,['name','age']] # 인덱스 2부터 끝까지 불러오기 df.loc[2:,['name','age']]
데이터 행/열 선택에서 다중조건을 적용하는 심화과정은 아래의 포스팅 참고
[Python]다중 조건으로 데이터 프레임 특정 행 추출하기(데이터 프레임 필터링)
6. 열 생성/삭제
6.1 열 생성
6.2 열 삭제
df = df.drop(['name','total'],axis=1)
7. 중복 확인/제거
7.1 중복 확인
중복값이 존재하는 행에 대해서 True 반환
# 데이터 생성 dic = { "name": ["Kim", "Lee", "Youn", "Lee", "Kim"], "year": [2014, 2015, 2016, 2015, 2014], "points": [1.5, 1.7, 3.6, 2.4, 1.5] } df = pd.DataFrame(dic) # 전체 행의 중복 확인 df.duplicated() # year 컬럼의 중복 확인 df.duplicated(["year"]) df.duplicated(["year"],keep=False) # keep 인자의 기본값은 First # first : 후에 나타난 값을 중복으로 취급 # last : 먼저 나타난 값을 중복으로 취급 # False : 둘다 중복으로 취급
7.2 중복 삭제
# 한개의 컬럼(name)이 중복일 경우 삭제 df2 = df.drop_duplicates(["name"],keep='last') # 두개의 컬럼(name, points) 모두 중복일 경우 삭제 df3 = df.drop_duplicates(["name","points"],keep='last')
8. 결측치
8.1 결측치 찾기
# 데이터 생성 dic = { "name": ["Kim", "Lee", "Youn", None, "Kim"], "year": [2014, 2015, 2016, None, None], "points": [1.5, 1.7, 3.6, 2.4, 1.5] } df = pd.DataFrame(dic) # Nan의 위치 T/F로 반환 print(df.isnull()) # 각 컬럼별 Nan 개수 반환 print(df.isnull().sum())
8.2 결측치 제거
print(df) # Nan이 포함된 모든 행 삭제 df2 = df.dropna() print(df2) # name 컬럼에 Nan이 있는 행 삭제 df3 = df.dropna(subset=['name']) df3
thresh라는 파라미터를 통해서 관측값이 n개 미만일 경우에 삭제 하는 조건을 걸 수 있다.
dic = { "name": ["Kim", "Lee", "Youn", "Kim"], "year": [2014, 2015, 2016, None], "points": [1.5, 1.7, None, None] } df = pd.DataFrame(dic) df3 = df.dropna(thresh=2) df3
8.3 결측치 치환
# 데이터 생성 dic = { "name": ["Kim", "Lee", "Youn", None, "Kim"], "year": [2014, 2015, 2016, None, 2018], "points": [1.5, 1.7, 3.6, 2.4, 1.5] } df = pd.DataFrame(dic) print(df) # 모든 Nan을 0으로 치환 df2 = df.fillna(0) print(df2) # year 컬럼의 Nan값을 year컬럼의 평균으로 치환 import numpy as np df3 = df.copy() df3['year'] = df3['year'].fillna(np.mean(df['year'])) print(df3) # year 컬럼의 Nan값을 이전행의 값으로 치환 df4 = df.copy() df4['year'] = df4['year'].ffill() print(df4) # year 컬럼의 Nan값을 이후행의 값으로 치환 df5 = df.copy() df5['year'] = df5['year'].bfill() print(df5) # year 컬럼의 Nan값을 이전 이후행의 사잇값으로 치환 df6 = df.copy() df6['year'] = df6['year'].interpolate() print(df6)
9. Gourpby
특정 컬럼에 대해서 같은 값을 가지는 행끼리 묶어주는 메서드(함수)
dic = { "name": ["Kim", "Lee", "Youn", "Lee", "Kim"], "year": [2014, 2015, 2016, 2015, 2014], "points": [1.5, 1.7, 3.6, 2.4, 1.5], "dept" : ["CSE", "EE", "CSE", "CSE", "EE"] } df = pd.DataFrame(dic) print(df) # 각 그룹에 대해서 통계치를 반환 df[['year','points','dept']].groupby('dept').agg(['count','mean','max','min']) # groupby를 for문에서 받을 경우 for x in df.groupby('dept'): print("x[0]은 : ",x[0]) print("x[1]은 :\n",x[1]) break
반응형'Data Science > Pandas & Numpy&Scikit-learn' 카테고리의 다른 글
[Pandas] 데이터프레임 필터링, 특정 조건에 맞는 행/열 추출하기 (DataFrame.loc[]) (0) 2022.10.02 파이썬 수치 데이터 구간화(Binning) 하기 - pd.cut, pd.qcut (0) 2022.09.27 회귀모델에서 타겟(y)값의 정규화 방법 비교 실험 (0) 2022.05.27 [Python]다중 조건으로 데이터 프레임 특정 행 추출하기(데이터 프레임 필터링) (0) 2022.05.10 [정규화,sklearn] MinMaxScaler, StandardScaler, RobustScaler (0) 2021.09.14