판다스(Pandas)는 파이썬 데이터 분석 라이브러리 중 하나로, 데이터 조작, 정제, 분석, 시각화 등을 위한 다양한 기능을 제공합니다. 판다스는 시리즈(Series)와 데이터프레임(DataFrame)이라는 자료형을 이용하여 데이터를 처리합니다.
판다스를 사용하려면 먼저 설치가 필요합니다. 판다스는 pip를 이용하여 설치할 수 있습니다. 터미널에서 다음 명령어를 입력하여 판다스를 설치합니다.
$ pip install pandas
DataFrame 객체는 행과 열로 이루어진 2차원 데이터를 다루기 위한 객체입니다. 열은 각각의 변수를 나타내고, 행은 각각의 관측치를 나타냅니다. DataFrame 객체는 여러 가지 방법으로 생성할 수 있습니다.
# 리스트를 사용하여 DataFrame 객체 생성하기
import pandas as pd
data = [['A', 1], ['B', 2], ['C', 3]]
df = pd.DataFrame(data, columns=['col1', 'col2'])
print(df)
# 출력 결과
# col1 col2
# 0 A 1
# 1 B 2
# 2 C 3
# 딕셔너리를 사용하여 DataFrame 객체 생성하기
data = {'col1': ['A', 'B', 'C'], 'col2': [1, 2, 3]}
df = pd.DataFrame(data)
print(df)
# 출력 결과
# col1 col2
# 0 A 1
# 1 B 2
# 2 C 3
# CSV 파일을 사용하여 DataFrame 객체 생성하기
df = pd.read_csv('data.csv')
print(df)
DataFrame 객체에서는 열이나 행을 선택하여 데이터를 조회할 수 있습니다.
# 열 선택하기
df['col1']
df[['col1', 'col2']]
# 행 선택하기
df.loc[0]
df.loc[[0, 1, 2]]
DataFrame 객체에서는 데이터를 추가, 삭제, 수정하는 등 다양한 조작을 수행할 수 있습니다.
# 열 추가하기
df['col3'] = [4, 5, 6]
# 열 삭제하기
df.drop('col3', axis=1, inplace=True)
# 행 추가하기
df.loc[3] = ['D', 4, 5]
# 행 삭제하기
df.drop(3, inplace=True)
# 열 이름 변경하기
df.rename(columns={'col1': 'new_col1'}, inplace=True)
Series 객체는 인덱스와 값으로 이루어진 1차원 데이터를 다루기 위한 객체입니다. Series 객체는 DataFrame 객체에서 열을 선택하여 추출할 수 있습니다.
# 리스트를 사용하여 Series 객체 생성하기
import pandas as pd
data = [1, 2, 3]
s = pd.Series(data, index=['a', 'b', 'c'])
print(s)
# 출력 결과
# a 1
# b 2
# c 3
# dtype: int64
# 딕셔너리를 사용하여 Series 객체 생성하기
data = {'a': 1, 'b': 2, 'c': 3}
s = pd.Series(data)
print(s)
# 출력 결과
# a 1
# b 2
# c 3
# dtype: int64
Series 객체에서는 인덱스나 위치를 이용하여 데이터를 선택할 수 있습니다
판다스에서는 다양한 형태의 데이터를 불러올 수 있습니다. 대표적인 데이터 형식으로는 CSV, Excel, SQL 등이 있습니다.
CSV(Comma-Separated Values) 파일은 쉼표로 구분된 데이터를 저장하는 파일 형식입니다. 판다스에서는 read_csv()
함수를 이용하여 CSV 파일을 불러올 수 있습니다.
import pandas as pd
# CSV 파일 불러오기
df = pd.read_csv('data.csv')
Excel 파일은 스프레드시트 프로그램에서 생성한 데이터를 저장하는 파일 형식입니다. 판다스에서는 read_excel()
함수를 이용하여 Excel 파일을 불러올 수 있습니다.
import pandas as pd
# Excel 파일 불러오기
df = pd.read_excel('data.xlsx')
데이터를 불러온 후에는 데이터의 구조와 내용을 살펴볼 필요가 있습니다. 판다스에서는 다음과 같은 함수를 이용하여 데이터를 살펴볼 수 있습니다.
info()
함수는 데이터프레임의 정보를 출력합니다. 데이터프레임의 크기, 데이터 타입, 결측치 등의 정보를 확인할 수 있습니다.
# 데이터프레임 정보 확인하기
df.info()
head()
함수는 데이터프레임의 첫 n행을 출력합니다. n은 인자로 전달될 수 있습니다. 기본값은 5입니다.
# 데이터프레임 일부 데이터 보기
df.head()
describe()
함수는 데이터프레임의 요약 통계량을 출력합니다. 각 열의 개수, 평균, 표준편차, 최소값, 25% 백분위수, 중앙값, 75% 백분위수, 최대값 등의 정보를 확인할 수 있습니다.
# 데이터프레임 요약 통계량 보기
df.describe()
데이터프레임에서는 특정한 열이나 행을 선택하여 데이터를 조회할 수 있습니다.
특정한 열을 선택할 때는 데이터프레임의 열 이름을 사용합니다.
# 열 선택하기
df['열 이름']
여러 개의 열을 선택할 때는 리스트 형태로 열 이름을 전달합니다.
# 여러 개의 열 선택하기
df[['열 이름 1', '열 이름 2', ...]]
특정한 행을 선택할 때는 loc[]
함수를 사용합니다. loc[]
함수는 행의 이름 또는 인덱스를 사용하여 행을 선택합니다.
# 행 선택하기
df.loc[행 이름 또는 인덱스]
여러 개의 행을 선택할 때는 리스트 형태로 행 이름 또는 인덱스를 전달합니다.
# 여러 개의 행 선택하기
df.loc[[행 이름 또는 인덱스 1, 행 이름 또는 인덱스 2, ...]]
데이터프레임에서는 특정한 조건을 만족하는 데이터만 선택하여 조회할 수 있습니다.
조건 필터링은 []
연산자와 조건식을 이용하여 수행합니다.
# 조건 필터링하기
df[조건식]
예를 들어, 2010년 이후의 데이터만 선택하고 싶을 때는 다음과 같이 작성할 수 있습니다.
# 2010년 이후의 데이터만 선택하기
df[df['Year'] >= 2010]
&
(and)와 |
(or) 연산자를 이용하여 논리 연산을 수행할 수 있습니다.
# 논리 연산자 이용하기
df[(조건식 1) & (조건식 2)]
df[(조건식 1) | (조건식 2)]
예를 들어, 2010년 이후이면서 금메달 이상을 획득한 데이터만 선택하고 싶을 때는 다음과 같이 작성할 수 있습니다.
# 2010년 이후이면서 금메달 이상을 획득한 데이터만 선택하기
df[(df['Year'] >= 2010) & (df['Medal'] == 'Gold')]
isin()
함수를 이용하여 특정한 값이 포함된 데이터만 선택할 수 있습니다.
# isin() 함수 이용하기
df[df['열 이름'].isin([값1, 값2, ...])]
예를 들어, 'KOR', 'USA', 'JPN' 국가의 데이터만 선택하고 싶을 때는 다음과 같이 작성할 수 있습니다.
# 'KOR', 'USA', 'JPN' 국가의 데이터만 선택하기
df[df['NOC'].isin(['KOR', 'USA', 'JPN'])]
데이터프레임에서는 특정한 기준에 따라 데이터를 그룹화하여 처리할 수 있습니다.
groupby()
함수를 이용하여 특정한 열을 기준으로 데이터를 그룹화할 수 있습니다.
# groupby() 함수 이용하기
df.groupby('열 이름')
groupby()
함수로 그룹화한 데이터는 각 그룹에 대한 정보를 담고 있는 객체입니다. 이를 바탕으로 다양한 처리를 수행할 수 있습니다.
그룹화된 데이터에 대해 집계 함수를 이용하여 다양한 처리를 수행할 수 있습니다.
# 집계 함수 이용하기
그룹화된 데이터.집계함수()
그룹화된 데이터에 대해 적용할 수 있는 집계 함수는 다양합니다. 일반적으로 사용되는 집계 함수는 다음과 같습니다.
count()
: 데이터의 개수를 세는 함수sum()
: 데이터의 합을 구하는 함수mean()
: 데이터의 평균을 구하는 함수median()
: 데이터의 중앙값을 구하는 함수min()
: 데이터의 최소값을 구하는 함수max()
: 데이터의 최대값을 구하는 함수std()
: 데이터의 표준편차를 구하는 함수var()
: 데이터의 분산을 구하는 함수# 집계 함수 이용하기
그룹화된 데이터.count()
그룹화된 데이터.sum()
그룹화된 데이터.mean()
그룹화된 데이터.median()
그룹화된 데이터.min()
그룹화된 데이터.max()
그룹화된 데이터.std()
그룹화된 데이터.var()
예를 들어, 국가별 금메달 수의 합계를 구하고 싶을 때는 다음과 같이 작성할 수 있습니다.
# 국가별 금메달 수의 합계 구하기
df[df['Medal'] == 'Gold'].groupby('NOC')['Medal'].count()
데이터프레임에서는 특정한 열을 기준으로 데이터를 정렬할 수 있습니다. 기본적으로 오름차순으로 정렬되며, 내림차순으로 정렬하려면 ascending=False
옵션을 추가합니다.
# 오름차순으로 정렬하기
df.sort_values('열 이름')
# 내림차순으로 정렬하기
df.sort_values('열 이름', ascending=False)
예를 들어, 아래와 같은 데이터프레임이 있다고 가정해 봅시다.
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47],
'city': ['New York', 'Paris', 'London', 'San Francisco']}
df = pd.DataFrame(data)
print(df)
name age city
0 Alice 25 New York
1 Bob 32 Paris
2 Charlie 18 London
3 David 47 San Francisco
이제 나이를 기준으로 데이터를 정렬해 보겠습니다.
df.sort_values('age')
name age city
2 Charlie 18 London
0 Alice 25 New York
1 Bob 32 Paris
3 David 47 San Francisco
데이터프레임에서는 reset_index()
함수를 이용하여 인덱스를 초기화할 수 있습니다. 이때 기존 인덱스는 열로 추가됩니다.
# 인덱스 초기화하기
df.reset_index()
예를 들어, 아래와 같은 데이터프레임이 있다고 가정해 봅시다.
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47],
'city': ['New York', 'Paris', 'London', 'San Francisco']}
df = pd.DataFrame(data)
df.set_index('name', inplace=True)
print(df)
age city
name
Alice 25 New York
Bob 32 Paris
Charlie 18 London
David 47 San Francisco
이제 인덱스를 초기화해 보겠습니다.
df.reset_index()
name age city
0 Alice 25 New York
1 Bob 32 Paris
2 Charlie 18 London
3 David 47 San Francisco
더 많은 데이터 분석 기능과 기법이 있지만, 기본적인 내용을 다루는 것이기 때문에 이상으로 기본적인 판다스 사용법에 대해 알아보았습니다. 판다스는 매우 다양한 기능을 제공하기 때문에 한 번에 모든 내용을 익히기는 어렵지만, 자주 사용하는 기능을 숙달하고, 필요할 때마다 검색하여 사용하면 판다스를 효과적으로 사용할 수 있습니다.
이외에도 앞으로 살펴볼 데이터 시각화를 위한 matplotlib
, seaborn
, 그리고 앞에서 살펴본 데이터 전처리를 위한 numpy
등 다양한 라이브러리들이 있으니, 필요한 기능에 맞게 적절한 라이브러리를 사용하여 데이터 분석을 수행해 보시기 바랍니다.