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 여기에 많이 적혀 있네요