pandas 패키지는 1차원 배열인 시리즈(Series) 및 행과 열로 이루어진 2차원 배열인 데이터프레임(DataFrame)을 통해 데이터 분석 업무를 쉽게 처리할 수 있게 해줍니다.
- 시리즈(Series)
- 데이터가 순차적으로 나열된 1차원 배열
- 인덱스(index)와 값(value)은 1대1 대응 관계이며, 이는 키(Key)와 값(value)의 형태로 구성된 딕셔너리와 비슷합니다.
import pandas as pd
dict_data = {'a':1, 'b': 2, 'c':3}
series = pd.Series(dict_data) # dictionary를 통해서 series 만들기. key값이 인덱스가 됨.
series.index # series의 index 반환
series.values # series의 value 반환
list_data = ['a','b','c']
series_2 = pd.Series(list_data) # list를 통해서 series 만들기. index는 정수형 위치 인덱스로 자동으로 지정
series_3 = pd.Series(list_data, index = ['index1','index2','index3']) # 직접 인덱스 설정
capital = pd.Series({'Korea':'Seoul',
'Japan':'Tokyo',
'China':'Beijing',
'India':'New Delhi',
'Taiwan':'Taipei',
'Singapore':'Singapore'
})
capital['Korea'] # Korea index의 value
capital['Korea','Taiwan'] # Korea와 Taiwan index의 value(series 형태)
captial[0] # 0번째 index의 value. 즉, 여기서는 Korea의 value
capital[[0,3]] # 0번째와 3번째의 index의 value.
capital[0:3] # 0이상 3미만의 index의 value.
# series의 사칙연산
series_4 = pd.Series([1,2,3])
series_5 = pd.Series([4,5,6])
series_1 + series_2 # 각각의 인덱스가 같은 값끼리 연산
series_1 * 2 # 모든 원소에 연산이 적용
- 데이터프레임(DataFrame)
- 2차원 배열
- 행과 열로 이루어진 테이블 형태
- 데이터프레임의 각 열은 시리즈 객체
- 시리즈가 열 방향으로 모여 데이터프레임을 구성
- 데이터프레임을 만들기 위해서는 원소의 개수가 동일한 1차원 배열이 여러 개 필요
import pandas as pd
dict_data = {'col1': [1,2,3], 'col2': [4,5,6], 'col3':[7,8,9]}
df = pd.DataFrame(dict_data) # dictionary로 DataFrame 만들기
df2 = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]]) # list로 DataFrame 만들기. 인덱스는 자동으로 정수형
df3 = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],
index=['index1','index2','index3'],
columns=['col1','col2','col3']) # 직접 인덱스, 열이름 설정
df3.index = ['행1','행2','행3'] # 만들어진 DateFrame의 index 변경
df3.columns = ['열1','열2','열3'] # 만들어진 DataFrame의 columns 변경
df3.rename(index={'행1': '첫 번째 행'}, inplace=True) # 행 인덱스나 열 이름 중 원하는 부분만 변경. inplace = True하면 원본데이터 변경
df3.rename(columns={'열1': '첫 번째 열'}, inplace=True)
df3.drop('행 3', axis=0, inplace = True) # drop()메서드는 행 혹은 열 삭제. 행을 삭제할 때는 axis = 0. 즉 DataFrame.drop(행 이름, axis = 0)
df3.drop('열 3', axis=1, inplace = True) # 열을 삭제할 때는 axis=1. 즉 DataFrame.drop(열 이름, axis = 1)
# 열을 하나만 선택
# DataFrame['열 이름'] (type은 series)
# DataFrame.열 이름. 열 이름이 문자열인 경우에만 가능 (type은 series
# DataFrame[['열 이름']] (type은 DataFrame)
# 열을 여러 개 선택
# DataFrame[['열 이름1', '열 이름2']]
# 행 데이터 선택
# DataFrame.loc['행 이름']. loc .,.,: 인덱스 이름을 기준으로 행을 선택할 때 사용 (type은 series)
# DataFrame.iloc[인덱스 위치]. iloc: 위치 인덱스를 기준으로 행을 선택할 때 사용 (type은 series)
# 데이터 프레임 형태로 반환하고 싶다면 2중 대괄호[['행 이름']] , [[인덱스 위치]] 사용
# slice도 사용가능. loc는 범위의 끝을 포함, iloc은 범위의 끝을 제외
# 행과 열 선택
# DataFrame.loc['행 인덱스', '열 이름']
# DataFrame.iloc[행 위치, 열 위치]
# 여러 개 선택할 때는 2중 대괄호
# slice도 사용 가능.
- 데이터 불러오고 저장하기
파일 포맷 | 불러오기 | 저장하기 |
CSV | read_csv() | to_csv() |
EXCEL | read_excel() | to_excel() |
SQL | read_sql() | to_sql() |
HTML | read_html() | to_html() |
JSON | read_json() | to_json() |
HDF5 | read_hdf() | to_hdf() |
- 데이터 요약 및 통계값 계산
DataFrame.head(n) : 데이터의 맨 위 살펴보기
DataFrame.tail(n): 데이터의 맨 아래 살펴보기
* n에 정수를 입력하면 맨 위 혹은 아래의 n개 행을 보여주고, 값을 입력하지 않으면 기본값인 5개 행을 보여줍니다.
DataFrame.shape: 데이터프레임의 행과 열의 갯수(tuble 형태)
DataFrame.info: 데이터프레임의 기본정보
DataFrame['열 이름'].value_counts() : 각 열의 고유값 개수. 리스트 형태로 여러 개의 열을 작성하여 다중 열을 기준으로 메세지 적용 가능. value_counts 안에 normalize = True라고 하면 비율로 표현.
DataFrame['열 이름'].value_counts().sort_index() : 인덱스 정렬
DataFrame['열 이름'].mean() : 해당 열 평균구하기. 리스트 형태로 여러 개의 열을 작성하여 여러 열의 평균을 계산할 수 있습니다.
DataFrame['열 이름'].min() : 최솟값
DataFrame['열 이름'].max() : 최댓값
DataFrame['열 이름'].median() : 중간값
* NaN : Not a Number. 결측치 혹은 누락값. 데이터를 입력할 때 빠지거나 소실된 값. 이것이 많아지면 데이터의 품질이 떨어지고 제대로된 분석을 할 수 없기에 적절하게 처리하는 과정이 필요.
- 결측치 찾기
isnull(): 결측치면 True, 유효한 데이터면 False 반환
notnull(): 유효한 데이터면 True, 결측치면 False 반환
결측치를 다루는 가장 간단한 방법은 결측치가 있는 행 또는 열을 삭제하는 것입니다.
Dataframe.dropna(): 결측치 삭제(결측치가 있는 행을 모두 삭제)
DataFrame.dripna(subset = ['열 이름'], axis = 0): subset은 기준 열. axis = 0은 행 방향 -> 해당 열에서 결측치가 있는 데이터만 삭제.
DataFrame.dripna(axis = 1) : axis = 1을 하면 결측치가 있는 열을 삭제할 것임.
DataFrame.dripna(axis = 1, thresh = n) : 결측지가 n개 이상인 열을 삭제.
DataFrame['열 이름'].fillna(n, inplace = True) : null값을 n으로 채우기.
DataFrame['열 이름'].fillna(method='ffill') : 결측치가 있는 경우 위의 행 중 결측치가 나타나기 전의 값으로 바꿔줌. (예를 들어, 시계열 데이터는 서로 이웃하고 있는 데이터끼리 유사성을 가질 가능성이 높은데 이럴 경우 사용)
DataFrame['열 이름'].fillna(method='bfill') : 결측치가 있는 경우 아래의 행 중 결측치가 아닌 첫 번째 값으로 바꿔줌.
-인덱스 다루기
DataFrame.set_index('열 이름', inplace = True): 해당 열이 인덱스로 설정됩니다.
DataFrame.sort_index(inplace = True) : 인덱스가 오름차순으로 정렬됩니다.
DataFrame.sort_index(inplace = True, ascending = False): 인덱스가 내림차순으로 정렵됩니다.
DataFrame.reset_index(inplace = True): 인덱스 초기화(재설정). 인덱스가 위치 인덱스로 다시 초기화
- 필터링
DataFrame['열 이름'].unique(): 고유한 값을 반환
DataFrame['열 이름'] == 값 : 값와 같은 행은 True, 다른 행은 Fasle
DataFrame.loc[ filter , ] : , 뒤 아무 것도 안쓰면 모든 열을 의미하므로 filter에 해당하는 값을 추출. and, or 등을 이용하여 필터에 여러개의 조건을 넣을 수 있습니다.
DataFrame['열 이름'].isin('값1' , '값2') : 해당 열에 isin() 내부의 값이 포함되어 있으면 True를 반환합니다.
'Programming Language > Python' 카테고리의 다른 글
[Python] Python과 SQL 연결 (0) | 2023.12.29 |
---|---|
[Python] ValueError: invalid literal for int() with base 10: '1.70 (0) | 2023.12.29 |
[Python] 데이터 시각화(matplotlib, pandas, seaborne) (0) | 2023.12.29 |
[Python] Pandas package -2 (0) | 2023.12.29 |
[Python] Mac How to fix ModuleNotFoundError: No module named 'Crypto' (1) | 2023.12.29 |