💡 Pandas?
Pandas는 데이터 조작과 분석을 위한 파이썬 소프트웨어 라이브러리 입니다. Pandas에서는 표 형태의 데이터를 다루기 위한 두 가지 주요 데이터 구조인 Serise(1차원)와 DataFrame(2차원)이 존재합니다.
💡 Series?
Series는 1차원의 데이터를 다룹니다. 1차원 리스트와 유사하지만, 리스트와의 큰 차이점은 시리즈는 인덱스 이름을 부여할 수 있다는 점 입니다.
💡 DataFrame?
DataFrame은 판다스의 2차원 자료구조 입니다. 시리즈들의 집합이며 행과 열이 있는 테이블 형태를 가집니다.
1. Series
Series 객체 생성
import pandas as pd
value = pd.Series(['가','나','다','라'])
print(value)
value[0]
Series Index 지정
value = pd.Series(['가','나','다','라'], index=['one', 'two', 'three', 'four'])
value
2. DataFrame
원피스 주요 인물 8명에 대한 데이터
data = {
'이름' : ['루피', '조로', '상디', '나미', '우솝', '쵸파', '로빈', '프랑키'],
'고향' : ['Eastblue','Northblue','Northblue', 'Eastblue', 'Grandline', 'Grandline', 'OHARA', 'Waterseven'],
'키' : [174, 181, 180, 170, 173, 90, 188, 240],
'국어' : [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],
'기술' : ['레드호크', '아수라', '디아블잠브', '', '', '', '풀루르', '라디컬 빔']
}
DataFrame 객체 생성
import pandas as pd
df = pd.DataFrame(data)
df
데이터 조회
df['이름']
df[['이름','키']]
DataFrame 인덱스 지정해서 객체 생성
df = pd.DataFrame(data, index=['1번','2번','3번','4번','5번','6번','7번','8번',])
df
Index 이름 설정
df.index.name ='입단순서'
df
Index 이름 삭제
df.reset_index(drop=True, inplace=True) # inplace=True을 함으로써 실제 데이터에 바로 반영
Index 정렬
df.sort_index() # 인덱스로 오름차순 정렬
df.sort_index(ascending=False) # 내림차순으로 정렬
3. 파일 저장 및 열기
csv 파일로 저장
df.to_csv('onepiece.csv', encoding='utf-8-sig') # 한글 인코딩
텍스트 파일로 저장
df.to_csv('onepiece.txt', sep='\t') # tab 으로 구분된 텍스트 파일
엑셀 파일로 저장
df.to_excel('onepiece.xlsx')
csv 파일 열기
df = pd.read_csv('onepiece.csv') # 데이터 프레임객체로 변환
df
df = pd.read_csv('score.csv', skiprows = 1) # 지정된 갯수 만큼의 row 를 건너뜀
df
df = pd.read_csv('score.csv', nrows=4) # 지정된 갯수 만큼의 row 만 가져옴
df
df = pd.read_csv('onepiece.csv', skiprows=2, nrows=4) # 처음 2 row 무시, 이후에 4개 row를 갖고옴 , nrows는 헤더를 포함하고 4개 갖고옴
df
4. 데이터 조회 및 확인
DataFrame 확인
df.describe() # 계산 가능한 데이터에 대해 Column 별로 데이터의 갯수, 평균, 표준편차, 최소/최대값 등의 정보를 보여줌
df.info()
df.head(7) # 처음 7개의 row 를 가져옴
df.tail(3) # 마지막 3개 row 를 가져옴
df.values
df.index
df.columns
df.shape # row, column
Series 확인
df['키'].describe()
df['키'].min()
df['키'].max()
df['키'].nlargest(3) # 키 큰 사람 순서대로 3명 데이터
df['키'].mean() # 평균값
df['키'].sum()
df['기술'].count()
df['고향'].unique() # 중복 제거
5. 데이터 선택
import pandas as pd
df = pd.read_excel('onepiece.xlsx', index_col='입단순서')
df
Column 선택
df['이름']
df[['이름','키']] # 2개 컬럼이면 [] 한번도 감싸줌
Column 선택 (정수 index)
df.columns
df.columns[2]
df[df.columns[0]] # df['이름'] 과 동일한 동작
슬라이싱
df['영어'][0:5] # 0~4 까지 영어 점수 데이터 가져옴
df[3:] # 4~8 까지 전체 데이터 가져옴
loc는 이름을 이용하여 원하는 row에서 원하는 column을 선택
df.loc['1번'] # index 1번에 해당하는 전체 데이터
df.loc['1번','국어'] # index 1번에 해당하는 국어 데이터
df.loc['1번':'5번', '국어':'사회'] # index 1번부터 5번까지, 국어부터 사회까지 데이터 (5번 직전까지가 아닌 포함해서 갖고온다.)
df['키'] >= 175 # 학생들의 키가 185 이상인지 여부를 True / False
filt = (df['키'] >= 175)
df[filt] # 조건을 포함해서 확인
df[df['키'] >= 175 ]
df.loc[df['키'] >= 175, ['이름','수학','과학']] # 키가 175 이상인 학생들이 이름, 수학, 과학 데이터
6. 다양한 조건
& 그리고
df.loc[(df['키'] >= 175) & (df['고향'] == 'Northblue')] # 키가 175 이상인 Norhblue 데이터
| 또는
df.loc[(df['키'] < 170) | (df['키'] > 190)] # 키가 170보다 작거나, 190 보다 큰 데이터
str 함수
filt = df['이름'].str.startswith('프') # '프'씨 성을 가진 사람
df[filt]
df[~filt] # 이름에 '프' 가 들어가는 사람을 제외
langs = ["Eastblue", "Grandline"]
filt = df['고향'].isin(langs) # 고향이 Eastblue 이거나 Grandline 인 사람
df[filt]
7. 결측치
비어 있는 데이터
import pandas as pd
df = pd.read_excel('onepiece.xlsx', index_col='입단순서')
df
데이터 채우기 fillna
df.fillna('') # Nan 데이터를 빈 칸으로 채움
df.fillna('없음', inplace = True) # 만약 원본 df DataFrame 을 보존할 필요가 없이 바로 결과값으로 수정하고 싶으면 inplace=True 옵션을 설정해주면 됩니다.
df
💡Numpy?
Numpy는 다차원 배열을 쉽게 처리하고 효율적으로 사용할 수 있도록지원하는 파이썬의 패키지입니다. NumPy는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공합니다.
import numpy as np
df['기술'] = np.nan # 기술 데이터 전체를 Nan 으로 채움
데이터 제외하기
df.dropna() # 전체 데이터 중에서 Nan 을 포함하는 데이터 삭제
df.dropna(axis = 'index', how = 'any') # Nan 가 하나라도 있는 row 삭제
df.dropna(axis='columns') # Nan 이 하나라도 있는 column 삭제
df.dropna(axis = 'columns', how = 'all') # 데이터 전체가 Nan 인 경우에만 Column 삭제
8. 데이터 정렬
df.sort_values('키') # 키 기준으로 오름차순 정렬
df.sort_values('키', ascending=False) # 키 기준으로 내림차순 정렬
df.sort_values(['수학','영어']) # 수학,영어 점수 기준으로 오름차순(우선순위가 수학 먼저이며 수학점수가 같을때 영어점수 오름차순)
df.sort_values(['수학','영어'], ascending=[True,False]) # 수학 점수는 오름차순 영어점수는 내림차순으로 정렬(수학 점수 같은때 영어점수를 내림차순)
9. 데이터 수정
import pandas as pd
df = pd.read_excel('onepiece.xlsx', index_col='입단순서')
df
df['고향'].replace({'Eastblue' : '이스트블루', 'Waterseven' : '워터세븐'},inplace=True)
df
df['고향'] = df['고향'].str.lower()
df
df['고향'] = df['고향'] + '출신' # 고향 데이터 + 출신
df
Column 추가
df['총합'] = df['국어'] + df['영어'] + df['수학'] + df['과학'] + df['사회']
df
df.loc[df['총합'] > 400, '결과'] = 'Pass' # 총합이 400 보다 큰 데이터에 대해서 결과를 Pass로 업데이트
df
Column 삭제
df.drop(columns=['총합']) # 총합 Column 을 삭제
Row 삭제
df.drop(index='4번') # 4번 학생 데이터 row를 삭제
Row 추가
df.loc['9번'] = ['징베','바다','304','90','90','90','90','90','어인공수도', 450,'Pass'] # 새로운 Row 추가
df
df.loc['4번','기술'] = '크라마 택트' # 4번 사람의 기술 데이터를 Nan -> 크라마 택트로 변경
df
10. 함수 적용
import pandas as pd
df = pd.read_excel('onepiece.xlsx', index_col='입단순서')
df
df['고향'] = df['고향'] + '출신'
df
키의 값은 정수임으로 dtype 오류 발생 함수 적용으로 해결 가능
df['키'] = df['키'] +'cm'
df
데이터에 함수 적용(apply)
# 키 뒤에 cm 을 붙이는 역할
def add_cm(height):
return str(height) + 'cm'
df['키'] = df['키'].apply(add_cm) # 키 데이터에 대해서 add_cm 함수를 호출한 결과 데이터를 반영
df
11. 그룹화
동일한 값을 가진 것들끼리 합쳐서 통계 또는 평균 등의 값을 계산하기 위해 사용
import pandas as pd
df = pd.read_excel('onepiece.xlsx', index_col='입단순서')
df
df.groupby('고향').get_group('Grandline') # 고향이 Grandline인 사람
df.groupby('고향').mean() # 계산 가능한 데이터들의 평균값
df.groupby('고향').size() # 각 그룹의 크기
df.groupby('고향')['키'].mean() # 고향으로 그룹화를 한 뒤에 키의 평균 데이터
df.groupby('고향')[['이름','기술']].count() # 고향으로 그룹화를 한 뒤에 고향별 이름,기술 데이터의 수를 가져옴
df['성별'] = ['남자','남자','남자','여자','남자','남자','여자','남자'] # 성별 Column 추가
df
hometown = df.groupby('고향')
hometown['성별'].value_counts() # 고향으로 그룹화를 한 뒤에 성별 사람 수를 가져옴
df.groupby(['고향', '성별']).mean() # 고향별, 성별 평균 데이터
df.groupby('성별').mean().sort_values('키', ascending=False) # 성별을 그룹화 한뒤에 데이터의 평균과 키를 기준으로 내림차순
'Language > Python' 카테고리의 다른 글
[Python] 웹 크롤링 하여 csv 파일로 저장 (0) | 2022.03.01 |
---|---|
[Python] input()함수로 값 여러개 입력 받기 (0) | 2022.01.17 |
[Python] 패키지(package)와 모듈(module) 알아보기 (0) | 2022.01.16 |