티스토리 뷰

개발공부/🎅 Python

[Python] Pandas 기본 알아보기

2022. 9. 27. 18:17

1️⃣  Pandas 소개

 

구조화된 데이터를 효과적으로 처리하고 저장할 수 있는 Python 라이브러리

 

-  Array 계산에 특화된 NumPy를 기반으로 구성되어 다양한 기능을 제공한다.

-  특히, 행과 열을 가진 2차원 데이터와 엑셀 데이터에 대해서 데이터 프레임이라는 효율적인 자료구조를 제공하여 조금 더 익숙하고 강력한 데이터 연산을 제공한다.

 

 

 

 

 

 2️⃣  Series 데이터

 

-  numpy array가 보강된 형태로서 Data와 Index를 가지고 있다.

import pandas as pd

data = pd.Series([1, 2, 3, 4])
data

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 기본 알아보기 강의자료

 

 

 

-  인덱스를 가지고 있고 인덱스로 접근 가능하다.

data = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])

data['b']	# 2

 

 

-  name 인자로 이름을 지정할 수 있다.

data = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'], name="Title")
data['c'] = 5

 

 

-  딕셔너리에서 Series로 변환 가능하다.

population_dict = {
'korea': 5180,
'japan': 12718,
'china': 141500,
'usa': 32676
}

population = pd.Series(population_dict)

 

 

 

 

 

 

3️⃣  Data Frame

 

여러 개의 Series가 모여서 행과 열을 이룬 데이터

 

Series 하나의 컬럼 값
Data Farme 여러 개의 컬럼 값 (여러 개의 Series)

 

 

 

 

-  딕셔너리로 변환할 수 있다.

gdp_dict = {
    'korea': 169320000,
    'japan': 516700000,
    'china': 1409250000,
    'usa': 2041280000,
}

gdp = pd.Series(gdp_dict)

country = pd.DataFrame({
    'population': population,
    'gdp': gdp
})

 

 

 

-  index 확인하기 / column 확인하기

country.index	# Index(['china', 'japan', 'korea', 'usa'], dtype='object')

country.columns	# Index(['gdp', 'population'], dtype='object')

 

 

 

 

-  특정 컬럼 값만 조회하기

country['gdp']
type(country['gdp'])	# pandas.core.series.Series

 

 

 

 

-  데이터 프레임 내의 Series에 연산이 가능하다.

gdp_per_capita = country['gdp'] / country['population']

country['gdp per capita'] = gdp_per_capita

 

 

 

-  csv파일, 엑셀 파일 등으로 저장하고 읽어올 수 있다.

# 저장
country.to_csv("./country.csv")
country.to_excel("country.xlsx")

# 파일 읽어오기
country = pd.read_csv("./country.csv")
country = pd.read_excel("country.xlsx")

 

 

 

 

 

 

4️⃣  Indexing & Slicing

 

데이터 프레임의 값을 참조하기 위해 사용하는 인덱싱과 슬라이싱에는 두 가지 방법이 있다.

 

 

 

1)  명시적인 인덱스를 참조하는 인덱싱/슬라이싱   -   loc

 

-  loc로 인덱싱

country.loc['china']

 

-  loc로 슬라이싱

country.loc['japan':'korea', :'population']

 

 

 

 

2)  파이썬 스타일 정수 인덱스 인덱싱/슬라이싱   -   iloc

 

-  iloc로 인덱싱

country.iloc[0]

 

-  iloc로 슬라이싱

country.iloc[1:3, :2]

 

 

 

 

 

DataFrame에 새로운 데이터 추가/수정

 

dataframe = pd.DataFrame(columns=['이름', '나이', '주소'])

# 리스트로 추가
dataframe.loc[0] = ['임원균', '26', '서울']

# 딕셔너리로 추가
dataframe.loc[1] = {'이름':'철수', '나이':'25', '주소':'인천'}

# 데이터 수정
dataframe.loc[1, '이름'] = '영희'

 

 

 

 

DataFrame에 새로운 컬럼 추가

dataframe['전화번호'] = np.nan
dataframe.loc[0, '전화번호'] = '01012341234'

len(dataframe)	# 2

 

 

 

 

DataFrame 컬럼 선택하기

 

컬럼 이름이 하나만 있다면 Series, 리스트로 들어가 있다면 DataFrame으로 반환된다.

dataframe["이름"]
dataframe[["이름", "주소", "나이"]]

 

 

 

 

 

 

 

5️⃣  Pandas 연산과 함수

 

 

누락된 데이터 체크

 

현실 데이터는 일부 누락되어 있는 형태가 많다.

 

-  isnull()  :  비어있는 값이면 True

-  notnull()  :  비어있지 않은 값이면 True

dataframe.isnull()

dataframe.notnull()

 

 

- dropna()  :  데이터가 비어있는 row를 제거

dataframe.dropna()

 

 

-  fillna()  :  비어있는 값을 채우기

dataframe['전화번호'] = dataframe['전화번호'].fillna('전화번호 없음')

 

 

 

 

 

 

Series 연산

 

numpy array에서 사용했던 Series연산자들을 동일하게 활용할 수 있다.

A = pd.Series([2, 4, 6], index=[0, 1, 2])
B = pd.Series([1, 3, 5], index=[1, 2, 3])

A + B
A.add(B, fill_value=0)

 

 

 

 

 

Data Frame 연산

 

add ( + ), sub ( - ), mul ( * ), div ( / )

A = pd.DataFrame(np.random.randint(0, 10, (2, 2)), columns=list("AB"))
B = pd.DataFrame(np.random.randint(0, 10, (3, 3)), columns=list("BAC"))

A + B
A.add(B, fill_value=0)

 

 

 

 

 

 

집계함수

 

numpy array에서 사용했던 sum, mean 등의 집계함수를 동일하게 사용할 수 있다.

data = {
    'A': [ i+5 for i in range(3) ],
    'B': [ i**2 for i in range(3) ]
}

df = pd.DataFrame(data)
df['A'].sum()	# 18
df.sum()
df.mean()

 

 

 

 

 

값으로 정렬하기

df.sort_values(컬럼)

 

예시)

df = pd.DataFrame({
    'col1' : [2, 1, 9, 8, 7, 4],
    'col2' : ['A', 'A', 'B', np.nan, 'D', 'C'],
    'col3': [0, 1, 9, 4, 2, 3],
})


df.sort_values('col1')
df.sort_values('col1', ascending=False) # 내림차순
df.sort_values(['col2', 'col1']) # col2로 먼저 정렬, col2의 값은 값에 대해 col1로 정렬
df.sort_values(['col2', 'col1'], ascending=[True, False]) # col2는 오름차순, col1은 내림차순

 

 

 

 

 


 이 글은 엘리스의 AI트랙 5기 강의를 들으며 정리한 내용입니다.

반응형
프로필사진
개발자 삐롱히

프론트엔드 개발자 삐롱히의 개발 & 공부 기록 블로그