Pandas 01

이서영·2023년 8월 11일
0

python

목록 보기
3/3

1. Pandas란

  • '관계형' 호은 '레이블이 된' 데이터로 쉽고 직관적으로 작업 할 수 있도록 설계된, 빠르고 유연한 데이터 구조를 제공하는 python 패키지

  • 행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있다.

  • 대용량의 데이터들을 처리하는데 편리하다

  • pandas의 기능

    • 데이터 정렬, 손실 데이터를 통합 처리
    • 데이터 세트를 재형성(Reshaping), 피벗
    • 라벨 기반 슬라이싱, 멀티 인덱싱 및 커다란 데이터 세트를 부분 집합으로 구성(Subsetting)
    • 데이터 구조 열을 삽입하고 지우기
    • 분할-적용-통합(Split-Apply-Combine) 연산이 가능한 엔진으로 데이터 세트를 그룹화
    • 데이터 세트를 합치고(Merging) 붙이기(Joining)
    • 저차원 데이터 구조에서 고차원 데이터를 연산할 수 있도록 멀티 레벨 인덱싱
    • 다양한 시계열(Time Series) 처리 기능
    • 데이터 여과(Filtration)

2. pandas의 자료구조

2-1 series

  • 1차원 배열의 값(values)에 각 값에 대응되는 인덱스(index)를 부여할 수 있는 구조
import pandas as pd
ser = pd.Series(['a','b','c','d'], index = ['i','j','k','l'])
ser
>i    a
 j    b
 k    c
 l    d
 dtype: object

2-2 DataFrame

  • 2차원 리스트를 매개변수로 전달한다
  • 행,열, 값을 가지는 자료구조
  • 참고로 series의 name은 DataFrame의 columm 명이다.
  • 다양한 데이터 조작 기능과 함수 제공(필터링,정렬,그룹화,계산 등)
  • matplotlib이나 seaborn과 같은 라이브러리와 통합해 시각화
import pandas as pd
# 딕셔너리 -> dataframe
data = {
    'year':[2016, 2017, 2018],
    'country': ['korea', 'japan', 'china'],
    'GDP': ['1.637M', '1.73M', '1.83M' ]
}
df = pd.DataFrame(data, index=data['year'])    # index추가 가능
print(df)
>     year country     GDP      # 맨앞줄의 인덱스를 추가한것
2016  2016   korea  1.637M
2017  2017   japan   1.73M
2018  2018   china   1.83M

### 특정 변수 추출
print(df['country'])              # df.country 로 해도됨
>2016    korea                    # 맨 앞은 index
 2017    japan
 2018    china
 
###조회하기
df.head(n)                        # n번째까지 조회
df.tail(n)                        #뒤에서부터 n번째까지 조회
df.info()                         # columm별 null값과 자료형 확인
df.isnull                         # 결측값 확인

ii) dataframe의 함수들

functioncontext
count()NA를 제외한 수를 반환.
describe()요약 통계를 계산.
min(), max()최소, 최댓값을 계산.
sum()합을 계산.
mean()평균을 계산.
median()중앙값을 계산.
var()분산을 계산.
std()표준편차를 계산.
argmin(), argmax()최소, 최댓값을 가지고 있는 값을 반환합.
idxmin(), idxmax()최소, 최댓값을 가지고 있는 인덱스를 반환.
corr상관관계

2-3. dataframe 통계처리

###  통계처리
df.describe()                     # 기본적인 통계치 표시
df['year'].value.counts()         # year에 대한 값들의 횟수 조회
df.['year].corr(df['korea'])      #상관 계수 반환 method 인자 안에
                                  #원하는 상관계수 방식 넣을수 있음 
grouped = df.groupby('A')['B'].mean() #그룹단위로 평균
grouped = df['column_name'].groupby('A')  # column 컬럼을 a를 기준으로 그룹화

2-4. dataframe method

  • 여기서는 위에 내용과 중복되더라도 올렸다.
  • 먼저 알아둘 것은 loc와 iloc이다.

loc & iloc

  • loc
    • loc은 라벨 기반의 인덱싱 수행
    • 인덱스의 실제 라벨 값으로 데이터 선택
    • 사용법 : df.loc[row_label, column_label]
  • iloc
    • iloc은 정수 기반의 인덱싱 수행
    • 정수 위치를 사용해 데이터 선택
    • 사용법 : df.iloc[row_index, column_index]
### 단항
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, 
### loc
index=['row1', 'row2', 'row3'])
# 'row2' 행의 'B' 열 데이터 선택
value = df.loc['row2', 'B']

### iloc
# 첫 번째 행의 두 번째 열 데이터 선택
value = df.iloc[0, 1]

### 다중
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
# loc 다중 행과 열 선택
df = pd.DataFrame(data, index=['row1', 'row2', 'row3'])
subset = df.loc[['row1', 'row3'], ['A', 'C']]
# iloc
subset = df.iloc[[0, 2], [0, 2]]

I) 산술연산

## 합
df1 = pd.DataFrame({'a':[1,2,3], 'b':[10,NaN,20]})
df2 = pd.DataFrame({'b':[1,2,3], 'c':[10,NaN,20]}, index = [0,1,3])
df1 + df2
>    a	 b	   c
 0	NaN	11.0 NaN
 1	NaN	NaN	 NaN
 2	NaN	NaN	 NaN
 3	NaN	NaN	 NaN
 
 #이렇게 뜨는 이유는 df는 index와 column명이 같을 떄 두 값을 연산하기 때문 둘중 하나라도 다르면 NaN, 값이 하나라도 NaN이면 NaN
메서드로는 add,sub,div,mul가 있다.

df1.add(df2, fill_value = 0) # 매칭되지 않는 키는 0으로 치환
>    a	 b	  c
0	1.0	11.0 10.0
1	2.0	2.0	 NaN
2	3.0	20.0 NaN
3	NaN	3.0	 20.0
### 같은 열끼리 연산
df1 + df1.iloc[0]
>	a	b
0	2.0	20.0
1	3.0	NaN
2	4.0	30.0
### 축지정 
df1.add(df1.iloc[:,0], axis=0)
>   a   b
0  2.0 11.0
1  4.0 NaN
2  6.0 23.0

II) 정렬(sort_index, sort_values)

  • 인덱스 정렬과 특정 열을 기준으로 정렬하는 방법이 있다
import pandas as pd
## sort_index
df.sort_index(axis = 0,             # 정렬 방향
              level,                # 다중 인덱스의 경우 정렬 레벨
              ascending = True,     # 오름차순
              inplace = False,      # 새로운 데이터프레임 반환(원본 유지)
              na_position='last')   # 결측값 위치

## sort_values
df.sort_values(by='column_name',       # 기준 열
               ascending=True/False,   # 오름차순/내림차순
               inplace = True/False,   # 새로운 데이터프레임/ 원본 수정
               axis =0/1 ,             # 행/열
               na_position             # 결측값 위치
               index_value=index_list) 

III) 순위(Rank)

data.rank(axis=0/1,            # 행/열
          method='average',    # 둉일값 있을시 요소 순위 방법 
          numeric_only=True/None,   #  숫자형만 계산할지/ 모든열 할지
          na_option='keep',          # 결측값 있을시 순위
          ascending=True/False,      # 오름차순/내림차순
          pct=False)                 # 백분율 순위계산

IV) 데이터 중복(unique,value_counts)

# unique
unique_values = df['column_name'].unique() # 리스트형태로 반환하며, 어떤 값들이 사용되는지 알수 있다.
# value_counts
value_counts = df['column_name'].value_counts() # 각 값의 개수를 내리차순으로 반환, 빈도를 파악하는데 유리

V) 특정 데이터 일치/포함 여부 확인(isin, in)

  • isin() 메서드는 데이터프레임의 열이나 시리즈에 대해 여러 개의 값을 리스트로 입력하면, 해당 값들이 포함되어 있는지 여부를 확인하고 불리언(Boolean) 형태의 결과를 반환.
# isin
result = df['column_name'].isin([value1, value2, value3])
# in        # 개별 인자 값이 있는지 확인(리스트나 시리즈)
value_exist = value in series_or_list
## 데이터 프레임 열은 안되기 떄문데 to_list를 사용해 변환
value_exist = value in df['col'].to_list

3. pandas의 plot

  • 기본적인 형태
df.plot(args,kwargs)
###
kind : 플로팅할 유형 (line,bar,box,scatter)
subplot : 각 열들을 별개의 서브차트로 플로팅할지 여부(True/False)
grid : 격자 여부  (True/False)
figsize : 출력할 fig크기 (x크기,y크기)
xlim /ylim : x,y축 값 경계 지정 (xlim = 크기,ylim =크기)
###
profile
전공자 학생

0개의 댓글