>> pandas 불러오기
import pandas as pd
1. series
: 1차원 데이터(정수, 실수, 문자열 등)
> series 만들기
temp=pd.Series([-20,-10,10,20])
> series index 지정
temp=pd.Series([-20,-10,10,20], index=['Jan','Feb','Mar','Apr'])
# 색인
temp['Jan'] #index Jan{1월}에 해당하는 데이터 출력
2. DataFrme
: 2차원 데이터(정수, 실수, 문자열 등)
#2차원 데이터 초기화
data={ '이름' : ['채치수','정대만',"송태섭","서태웅","강백호","변덕규","황태산","윤대협"]
,'학교' : ["북산고","북산고","북산고","북산고","북산고","능남고","능남고","능남고"]
, '키' : [197,184,168,187,188,202,188,190]
,'국어' : [90,40,80,40,15,80,55,100]
,'영어' : [85,35,75,60,20,100,65,85]
,'수학' : [100,50,70,70,10,95,45,90]
,'과학' : [95,55,80,75,35,85,40,95]
,'사회' : [85,25,75,80,10,80,35,95]
,'SW특기' : ['Python','Java','Javascript','','','C','PYTHON','C#']}
>데이터 프레임 만들기
df=pd.DataFrame(data)
>데이터 접근
#이름과 키값만 출력
df[['이름','키']]
3. Index
>> index 지정
# index는 데이터 행 개수와 일치하여야 함
df=pd.DataFrame(data, index=['1번','2번','3번','4번','5번','6번','7번','8번'])
df.index.name="지원번호" #index 이름 지정
>index 조회 : df.index
>index 초기화 : df.reset_index(drop=True) => 실제 인덱스에는 반영x
>index 초기화 : df.reset_index(drop=True,inplace=True) => 실제 인덱스에 반영
>index 값 설정 : df.set_index(' 인덱스 이름 ')
>index 정렬 : df.sort_index( ascending = True/False) #인덱스로 오름/내림차순 정렬
4. 파일 저장 및 열기
dataframe 객체를 excel, csv, txt 등 형태의 파일로 저장/열기
- 파일저장
> csv로 저장하기 : df.to_csv('파일명')
> txt로 저장하기 : df.to_text('파일명')
> 엑셀로 저장하기 : df.to_excel('파일명')
#옵션
구분자 설정 : sep
인덱스 컬럼 지정 : index_col
- 파일불러오기
> csv 불러오기 : pd.read_csv('파일명')
> 엑셀 불러오기기 : pd.read_excel('파일명')
#옵션
행 건너뛰기 : skiprows = [1,3,5] -> 리스트에 있는 행을 건너뜀
읽을 행 수 : nrows
-> skiprows는 컬럼 헤더를 하나의 행으로 파악
-> nrows는 첫 행을 컬럼 헤더로 설정하고 이후부터 추출
5. 데이터 확인
#dataframe 확인 : df.describe() / df.info()
# 상위/하위 행 확인 : df.head() / df.tail()
# index 확인 : df.index
#column 확인 : df.columns
# 값들 보기 : df.values
#행열 확인 : df.shape
#series 확인
기초통계 : describe() / info()
최소 : min()
최대 : max()
큰 사람 순서대로 n명 : nlargest(n)
평균 : mean()
합계 : sum()
null 값 제외한 유효데이터 개수 : count()
고유값 배열 : unique()
ex)
6. 데이터 선택
> 컬럼 선택 : df[['키','이름']]
> 정수를 통한 인덱싱
df [ df.columns[0] ] # df['이름']과 동일한 동작
df [ df.columns[-1] ] # 맨 우측 맨 끝에 있는 값을 가져옴
>슬라이싱(행에 대해서 적용) : 하나의 열에서 몇가지 행만 끊어서 가져옴
df [ '영어' ] [ 0 : 5 ] #0에서 4까지의 데이터를 가져옴df [ [ '이름', '키' ] ] [ :3 ] #이름 / 키 열의 0-2행의 데이터
> 데이터 선택(loc) : 이름을 이용해서 원하는 row에서 원하는 col을 선택
df.loc [ '1번' ] #index 1번에 해당하는 전체 데이터
df.loc [ '1번' , '국어' ] #index 1번에 해당하는 데이터 중 국어 데이터df.loc[ '1번' : '5번' , "국어" : "사회" ]
> 데이터 선택(iloc) : integer -> 정수 위치를 가지고 원하는 row에서 원하는 column
df.iloc[0:5] #0-4번째 인덱스까지 정보 슬라이스#슬라이싱 ->정수의 경우에는 대괄호가 추가적으로 필요xdf.iloc[0:5,3:8]
7. 데이터 선택(조건)
조건에 해당하는 데이터 선택
#조건을 변수에 넣어줌 -> 그 조건 변수를 대괄호 안에 넣어주기
filt= (df['키'] >=185)
df[filt]
df[~filt] #여집합 구하기
# loc 활용 : 조건으로 행 필터링
df.loc [ filt , ['이름' , '수학' , '과학' ] ] #키가 185 이상인 학생들의 이름,수학,과학 데이터
#다양한 조건
- & :그리고
- | : or
df.loc[(df['키']<170) | (df['키']>200)]
# str 함수
#소문자로 변환.str.lower()
#대문자로 변환.str.upper()
#.str. startswith() :~으로 시작하는 것
#.str. contains() :~가 포함되는 것
#.str. endswith() :~으로 시작하는 것
ex)
filt =df['이름'].str.startswith('송')
filt =df['이름'].str.contains('태')
#.isin(a) :a안에 있는지
langs= ['PYTHON', "Java"]
filt = df['SW특기'].isin(langs) # Sw특기가 안에있는지
8. 결측치
비어있는 데이터
>데이터 채우기 : fillna
df.fillna('') #결측치 데이터를 빈칸으로 채움
df.fillna('없음') #결측치 데이터를 없음으로 채움
>일부 데이터에서만 채우기 -> series 고른 이후에 채움
df['SW특기'].fillna('확인 중', inplace=True)
>데이터 제외하기 : dropna
df.dropna(inplace=True)
#옵션
axis : index / columns => null이 있는 행의 열을 지울지 / 행을 지울지 선택
how : any / all => 하나라도 있으면 지우기 / 전체가 null이면 지우기
9. 데이터 정렬
#sort_values(기준)
df.sort_values('키') #키 기준으로 오름차순 정렬df.sort_values('키', ascending =False) #키 기준으로 내림차순 정렬
#여러기준으로 order
#수학 점수 오름차순-> 영어 점수 기준 내림차순
df.sort_values(['수학', '영어'], ascending =[True,False])
10. 데이터 수정
# replace({a:b}) = a = > b
> 북산고를 키로 찾아서 상북고로 바꿈
df['학교'].replace({'북산고':'상북고'}, inplace=True)
>소/대문자로 바꾸기
df['SW특기'] = df['SW특기'].str.lower()
df['SW특기'] = df['SW특기'].str.upper()
>뒤에 값추가
df['학교'] = df['학교']+'등학교'
>추가
열 추가 : 열 이름 적고 값을 넣어줌
df['총합'] = df['국어'] +df['영어'] +df['수학'] +df['과학'] +df['사회']
행 추가 : index를 적고 각 값을 넣어주기
df.loc['9번']=['이정환','해남고등학교', 184, 90, 90, 90, 90,90, 'Kotlin', 450, 'Pass']
>삭제
열 삭제 : df.drop(columns=['총합'])
행 삭제 : df.drop(index='4번')
>ceil 수정
-> loc으로 셀 지정 후 범위에 들어갈 값 넣기
ex)
df.loc['4번','SW특기'] ='Python' # 4번 학생의 sw특기를 python으로 변경시킴df.loc['5번',['학교','SW특기']] =['능남고등학교','C'] # 5번 학생의 학교와 sw특기 변경
>열 순서 변경
맨 뒤에 있는 결과 column을 앞으로 가져오고 나머지 column들과 합쳐서 순서 변경df=df[[cols[-1]]+cols[:-1]]
>열 이름 변경 -> columns에 각각 값 대입
df.columns=['Result','Name','School']
11. 함수 적용
ex1) sw 특기를 첫글자는 대문자/나머지는 소문자로 만드는 함수 적용
ex2) 키 뒤에 cm를 붙이는 함수
12. 그룹화
동일한 값을 가진 것들기리 합쳐서 통계 or 평균
>그룹화 : df.groupby(기준열)
>그룹화 된 값 중 하나 추출
: df.groupby(기준열).get_group(값)
df.groupby('학교').get_group('북산고')
>그룹 크기정보 : df.groupby(기준열).size()
>특정 값의 크기정보
: df.groupby(기준열).size()['값']
df.groupby('학교').size()['능남고']
>값이 몇개 있는지 : value_counts()
'데이터 분석 > 파이썬' 카테고리의 다른 글
[파이썬 실무 테크닉 100] ch3. 고객의 전체 모습을 파악하는 테크닉 10 (0) | 2023.10.29 |
---|---|
[나도코딩] 데이터 분석 및 시각화 - matplotlib 요약 (0) | 2023.04.12 |
5-4) 범주형 변수 분석 (0) | 2023.03.29 |
5-3) 수치형 데이터 변수의 요약과 기술통계 (0) | 2023.03.29 |
5-2) 탐색적 데이터 도구 : pandas_profiling / sweetviz (0) | 2023.03.26 |