Study/NLP
Pandas 기초와 활용
재문OwO
2023. 9. 7. 20:03
1. Pandas
- 데이터 분석과 처리를 위한 라이브러리
- numpy와 같이 행과 열에 대해서 다루지만 numpy는 수치 분석등에 유용하고 pandas는 데이터들의 처리에 유용하다
- pandas의 강점은 데이터 탐색에 있다
- pandas 자료구조에는 1차원 - Series, 2차원 - DataFrame, 3차원 - Panel 등이 있다
2. Pandas 사용하기
import pandas as pd
3. Pandas로 1차원 데이터 다루기 - Series
- 1차원적인 데이터 집합이다
s = pd.Series([1,4,9,16,25])
- 딕셔너리도 호환이 가능하다
t = pd.Series({'one': 1, 'two': 2, 'three':3})
4. Series + Numpy
- Seires는 ndarray와 유사하다
print(s[1]) #pandas 인덱싱
print(t[1])
print(t[1:3]) #pandas 슬라이싱
- numpy와 다르게 조건을 추가하기 쉽다.
#자신의 중앙값보다 큰 값만 가지고 오기
s[s > s.median()]
- numpy와 호환 가능하다
import numpy as np
#자연상수 e의 s제곱 값
np.exp(s)
5. Series + dict
- series는 dict과도 유사하다
print(t['one'])
- series에 값 추가
t['six'] = 6
- dic_series에서 요소 찾기
print(t['six'])
#딕셔너리와 마찬가지로 없는 값 접근 불가
#print(t['seven'])
#없는 값 가져오기
#값이 없으면 2번째 인자를 가져옴
print(t.get('seven', 0))
6. Series에 이름 붙이기
- 'name' 속성을 가지고 있다
- 처음 Series를 만들 때 이름을 붙일 수 있다
s = pd.Series(np.random.randn(5), name = 'rand_num')
print(s)
print(s.name)
7. DataFrame
- 2차원 데이터
d = {'height':[175,173,169,183], 'weight':[60, 78, 65, 84]}
df = pd.DataFrame(d)
df
8. CSV에서 DataFrame으로 옮기기
- csv -> dataframe화 하는 함수 존재
- .read_csv()를 이용
- https://www.kaggle.com/datasets/imdevskp/corona-virus-report 사용된 CSV
COVID-19 Dataset
Number of Confirmed, Death and Recovered cases every day across the globe
www.kaggle.com
covid = pd.read_csv('파일의 위치')
print(covid)
- 일부분만 관찰하기
N = 5
#위에서부터 N개 관찰하기
print(covid.head(N))
#아래서부터 N개 관찰하기
print(covid.tail(N))
- 데이터 접근하기
- df['column_name'] or df.column.name
print(covid['Active'])
print(covid.Active)
print(covid['Active'][1:5])
- 조건을 이용해서 데이터 접근하기
# 신규 확진자가 10이하인 나라를 찾아보기
covid[covid['New cases']<10]
# WHO 지역이 동남아인 나라 찾기
print(covid['WHO Region'].unique()) #중복 되지 않는 지역의 목록 살펴보기
covid[covid['WHO Region'] == 'South-East Asia']
- 인덱스를 통해 가져오고 싶으면 loc=key, iloc = index를 통해 가져올 수 있다
9. Groupby
- 일정한 조건으로 묶는 방법
- Groupby 과정
- Split : 특정한 "기준"을 바탕으로 DataFrame을 분할
- Apply : 통계함수 - sum(), mean(), median()을 적용해서 각 데이터 압축
- Combine: Apply된 결과를 바탕으로 새로운 Series 생성
# WHO Region별 확진자 수 구하기
#split
covid_by_region = covid['Confirmed'].groupby(by = covid['WHO Region'])
#Apply
covid_by_region_sum = covid_by_region.sum()
print(covid_by_region_sum)
#Combine
covid_by_region_sum_df = pd.DataFrame(covid_by_region_sum)
print(covid_by_region_sum_df)
10. 데이터 병합
- merge(가로 병합), concat(세로 병합)을 사용
user = pd.DataFrame({'id':[1,2,3,4], 'name' = ['재문', '민준', '영희', '철수']})
game = pd.DataFrame({'id':[1,2,3,4], 'name' = ['LOL','PUBG','DarkSoul','발더게3', 'Play_User' = [1,3,2,2]}
new_user = pd.DataFrame({'id':[5,6], 'name' = ['창수', '호야']})
# 세로로 합치기 = append, concat
# ignore_index를 통해 새로 인덱스 지정 가능
new_user_set = user.append(new_user, ignore_index = True)
print(new_user_set)
new_user_set2 = pd.concat([user,new_user], ignore_index = True)
print(new_user_set2)
#가로로 합치기 = merge
#기준 열 이름이 같을 때 on = 기준열, how = join 방식
#기준 열 이름이 다를 때 left_on = 왼쪽 열, right_on 오른쪽 열
ans = game.merge(user, left_on = 'rent_user', right_on = 'id')
- suffixes = 병합할 객체들간 이름이 중복되는 열이 있을 때, 해당 열에 붙일 접미사 설정
ans = game.merge(user, left_on = 'rent_user', right_on = 'id',suffixes=('','_user'))
- drop을 통해 해당 열을 날릴 수 있음
#axis = 0 가로 axis = 1 세로
ans.drop('id_user' ,axis = 1)
더 다양한 기능은: https://wikidocs.net/151740 여기에 많이 적혀 있네요