Pandas란?
Pandas는 빠르고 강력하며 유연하고 사용하기 쉬운 오픈 소스 데이터 분석 및 조작 도구로, 파이썬 프로그래밍 언어를 기반으로 구축되었습니다.
Pandas는 데이터를 쉽고 빠르게 정렬하거나 인덱싱할 수 있고, 그루핑, 피봇팅과 같은 고급 기능을 제공합니다. 또한, join을 통해 데이터를 병합하고, 요약하거나 통계를 구하기도 쉽습니다.
import pandas as pd
pandas의 별칭은 통상적으로 pd
로 칭합니다.
Series와 DataFrame 이해하기
Series
Series(이하 시리즈)는 pandas에서 사용하는 일종의 리스트입니다. 파이썬의 딕셔너리와 리스트 타입의 데이터를 시리즈로 만들 수 있습니다.
dic = {'a': 'apple','b': 'cherry','c': 'banana'}
dic_series = pd.Series(dic)
print(type(dic_series), dic_series, sep='\n')
# <class 'pandas.core.series.Series'>
# a apple
# b cherry
# c banana
# dtype: int64
ls = [1, 2, 3]
ls_series = pd.Series(ls)
print(type(ls_series), ls_series, sep='\n')
# ls = [1, 2, 3]
# ls_series = pd.Series(ls)
# print(type(ls_series), pd.Series(ls), sep='\n')
리스트의 경우, 시리즈를 선언할 때 index
값을 지정해줄 수 있습니다.
ls_series = pd.Series(ls, index=['a','b','c'])
print(ls_series)
# a 1
# b 2
# c 3
# dtype: int64
Series의 정보 확인하기
.values
를 통해 시리즈의 요소를, .index
를 통해 시리즈의 인덱스를 확인할 수 있습니다. .dtype
을 통해서는 데이터의 자료형을 알 수 있습니다.
print(dic_series.values) # [apple cherry banana]
print(dic_series.index) # Index(['a', 'b', 'c'], dtype='object')
print(dic_series.dtypes) # int64
print(ls_series.values) # [1 2 3]
print(ls_series.index) # Index(['a', 'b', 'c'], dtype='object')
print(ls_series.dtypes) # int64
DataFrame
DataFrame(이하 데이터프레임)은 행과 열로 만들어지는 2차원 배열의 형태의 데이터입니다. 데이터프레임의 열은 각각의 시리즈 객체입니다.
dic = {'Fruits': ['Apple','Cherry','Banana']
, 'Count': [10, 12, 7]
, 'Price': [1000, 1700, 900]}
df = pd.DataFrame(dic)
df
Fruits | Count | Price | |
---|---|---|---|
0 | Apple | 10 | 1000 |
1 | Cherry | 12 | 1700 |
2 | Banana | 7 | 900 |
보시는 바와 같이, 딕셔너리의 key 값은 열의 이름이 되고, value의 리스트의 각 요소는 행에 각각 들어가는 것을 알 수 있습니다. 이때, value의 리스트의 개수가 모두 같아야 합니다. 하나라도 길이가 다른 리스트가 있으면 에러가 발생합니다.
ls = [['Apple', 10, 1000]
, ['Cherry', 12, 1700]
, ['Banana', 7, 900]]
df = pd.DataFrame(ls, columns=['Fruits', 'Count', 'Price'])
df
딕셔너리로 데이터프레임을 만들 때는 열 데이터 별로 리스트를 만들었다면, 리스트로 데이터프레임을 만들 때는 행의 데이터를 리스트로 만듭니다. 그리고 마지막에 데이터 프레임을 선언할 때 열의 이름을 지정해줍니다.
데이터 불러오기, 저장하기
Pandas의 큰 장점 중 하나는 외부 데이터를 다루기 용이하다는 것입니다. 데이터를 읽을 때는 read_xxx()
로 불러올 수 있고, 저장할 때는 to_xxx()
로 저장할 수 있습니다.
File Format | Reader | Writer |
---|---|---|
CSV | read_csv() |
to_csv() |
Excel | read_exel() |
to_excel() |
JSON | read_json() |
to_json() |
SQL | read_sql() |
to_sql() |
HTML | read_html() |
to_html() |
csv_file_path = './data/titanic_train.csv'
csv_data = pd.read_csv(csv_file_path)
csv_data.head()
를 통해 데이터가 제대로 가져와 졌는지 확인합니다.
모든 데이터를 가져올 수도 있지만, 특정 열만 가져올 수도 있습니다. usecols
값에 가져오길 원하는 열의 이름을 리스트의 형태로 입력해주면 usecols
에서 지정한 데이터만 가져옵니다. index_col
을 사용하면 인덱스 열로 사용할 열을 지정할 수 있습니다.
csv_data1 = pd.read_csv(csv_file_path, index_col = 'PassengerId', usecols = ['PassengerId','Survived','Pclass','Age'])
csv_data1.head()
엑셀 파일의 경우 sheet_name
을 통해 원하는 시트의 내용을 가져올 수 있고, html의 경우 encoding
을 통해 인코딩 혁식을 지원할 수 있는 등, 가져오는 데이터의 형태에 따라 여러 가지 데이터 옵션을 사용할 수 있습니다.
조건에 맞는 데이터 추출
행 조회하기
파이썬의 리스트 슬라이싱처럼, 대괄호[]
와 콜론:
을 통해 특정 열과 행을 조회할 수 있습니다.
df = pd.read_csv(...)
df[:10] # 0번 인덱스부터 9번 인덱스까지 가져옵니다.
df[2:8] # 2번 인덱스부터 7번 인덱스까지 가져옵니다.
열 조회하기
열을 조회할 때는 파이썬의 딕셔너리를 조회할 때와 같은 방법을 사용할 수 있습니다.
df['Age'] # Age 열의 모든 데이터를 가져옵니다.
df.Age # 위와 같습니다.
결과값을 데이터프레임의 형태를 보고 싶다면 to_frame()
함수를 사용하거나 대괄호로 두 번 감싸주면 됩니다.
df['Age'].to_frame()
df[['Name', 'Age']]
원하는 열과 행 동시에 가져오기
loc()
이나 iloc()
함수를 사용하면 원하는 행과 열을 동시에 가져올 수 있습니다. loc()
은 레이블의 값을 가지고 데이터를 조회합니다. iloc()
은 인덱스 값을 가지고 데이터를 조회합니다.
loc(행 조건, 열 조건)
의 형태로 사용합니다.
df.loc[3,] # 3번 행의 모든 데이터를 가져옵니다.
df.loc[:,'Name'] # Name 열의 모든 데이터를 가져옵니다.
df.loc[3,'Name'] # Name 열의 3 행 데이터를 가져옵니다.
df.loc[3:5,['Age','Class']] # 3번 행과 4번 행의 Age 값과 Class 값을 가져옵니다.
위의 코드의 두 번째 줄을 보면 행 조건에 콜론:
만 있는 것을 볼 수 있습니다. 이것은 리스트의 슬라이싱을 사용하면 됩니다. list[:]
은 리스트의 처음부터 끝까지 가져오는 코드입니다. 따라서 행 조건이 :
인 것은 처음부터 끝까지 가져오라는 뜻입니다.
반대로, iloc()
은 각 행과 열의 index 값을 가지고 데이터를 가져옵니다.
df.iloc[3:7,2:4] # 3번부터 6번 행까지의 데이터 중 2번, 3번 열만 가져옵니다.
df.iloc[[1,3,5],] # 1번, 3번, 5번 행을 가져옵니다.
데이터 정렬하기
sort_values(컬럼명, ascending)
함수를 사용하면 데이터를 정렬할 수 있습니다. ascending
은 오름차순 여부입니다. 기본값은 True이고, 내림차순 정렬을 하고 싶을 때는 False를 입력합니다.
df.sort_valeus('Age', ascending=False)
정렬하고 싶은 열이 여러 개라면 리스트의 형태로 입력합니다.
df.sort_values(['Age', 'Fare'])
특정 조건을 충족하는 데이터 추출하기
조건식을 통해 데이터를 필터링할 수 있습니다. 데이터프레임[조건식]
과 .query('조건식')
의 두 가지 형태로 사용할 수 있습니다.
첫 번째 형태로 사용할 경우, &
(and)나 |
(or)를 사용해서 복잡한 조건을 설정할 수 있습니다. 두 번째 방법의 경우 반드시 조건식의 내용을 문자열로 작성해야 합니다.
df[df['Pclass'] == 1]
df[(df['Pclass'] == 1) & (df['Age'] >= 30)]
df.query('Pclass == 1')
df.query('Pclass == 1 and Age >= 30')
.isin()
함수나 in
키워드를 사용하면 데이터를 사용하면 연속적이지 않은 여러 개의 데이터를 조회할 수 있습니다.
df[df['PassengerId'].isin([123, 456, 789])]
df.query('PassengerId in [123, 456, 789]')
df.query('PassengerId.isin([123, 456, 789])')
Pandas를 이용한 데이터 가공: 행과 열 가공하기, 결측값 처리하기
이번에는 Pandas로 데이터를 가공하는 방법에 대해 알아보겠습니다. import pandas as pdfile_path = './data/titanic_train.csv'df = pd.read_csv(file_path) 인덱스, 행, 열인덱스인덱스는 데이터프레임에서 각 행의 이
dararium.tistory.com
'데이터 분석 > 강의 노트' 카테고리의 다른 글
Pandas: 날짜 다루기, 사용자 정의 함수 적용하기, 데이터 결합하기 (0) | 2024.07.04 |
---|---|
Pandas: 행과 열 가공하기, 결측치 처리하기 (0) | 2024.07.04 |
데이터 시각화: 엑셀을 이용해 다양한 차트 만들기 (0) | 2024.06.27 |
데이터 분석과 모델링(2) : 엑셀을 통해 다중 선형 회귀 분석과 시계열 분석 해보기 (0) | 2024.06.27 |
통계 기본 개념 (0) | 2024.06.26 |