Pandas - Series & Dataframe 란?

2 분 소요

Pandas : Series & Dataframe 란?

pandas는 데이터 분석을 위한 파이썬 라이브러리이다. 행과 열로 이루어진 2차원 데이터프레임을 만들어 다룰 수 있다.

다음과 같은 기능을 제공한다.

  • 데이터 핸들링
  • 결측치 처리
  • 데이터 정렬
  • 데이터 요약
  • 데이터 병합
  • 데이터 변환
  • 데이터 시각화

pandas의 자료구조

  • 시리즈(Series) : 1차원 배열
  • 데이터프레임(DataFrame) : 2차원 배열
  • 패널(Panel) : 3차원 배열

pandas 라이브러리를 불러온다.

import pandas as pd

1. 시리즈(series)

pandas의 시리즈는 1차원 배열이다. series는 index와 value로 구성된다. series는 index를 지정하지 않으면 0부터 시작하는 정수형 인덱스를 사용한다.

1-1. series

dict_data = {'name': ['A', 'B', 'C', 'D'],
        'score': [100, 90, 80, 70],
        'grade': ['A', 'B', 'C', 'D']}
# dictionary -> series 타입으로 변환
print(type(dict_data)) #<class 'dict'>
# 형태 : pandas.Series(딕셔너리)
df = pd.Series(dict_data)
print(type(df)) #<class 'pandas.core.series.Series'>
print(df)
출력 결과 : 키와 값이 출력된다.
name          [A, B, C, D]
score    [100, 90, 80, 70]
grade         [A, B, C, D]

1-2. series index

list_data = ['2019-01-02', 3.14, 'ABC', 100, True]
sr = pd.Series(list_data)
print(sr)
출력 결과 : 인덱스가 자동으로 생성된다.
0    2019-01-02
1          3.14
2           ABC
3           100
4          True
idx = sr.index
val = sr.values
print(idx) #RangeIndex(start=0, stop=5, step=1)
print(val) #['2019-01-02' 3.14 'ABC' 100 True]

1-3. series element

tuple -> series 타입으로 변환

tup_data = ('영인', '2010-05-01', '여', True)
sr = pd.Series(tup_data, index=['이름', '생년월일', '성별', '학생여부'])
print(sr)

#원소 1개 선택
print(sr[0])
print(sr['이름'])

#원소 여러 개 선택
print(sr[[1,2]])
print(sr[['생년월일', '성별']])

#원소 범위 선택
print(sr[1:2])
print(sr['생년월일':'성별'])

2. 데이터프레임(DataFrame)

DataFrame은 2차원 배열이다. DataFrame은 행과 열로 이루어진 2차원 배열이다. DataFrame은 index와 column으로 구성된다. DataFrame은 index를 지정하지 않으면 0부터 시작하는 정수형 인덱스를 사용한다.

2-1. DataFrame

데이터 프레임 변환 형식 : pandas.DataFrame(딕셔너리) dict -> dataframe 타입으로 변환

dict_data = {'c0': [1,2,3], 'c1': [4,5,6], 'c2': [7,8,9], 'c3': [10,11,12], 'c4': [13,14,15]}
df = pd.DataFrame(dict_data)
print(type(df)) #<class 'pandas.core.frame.DataFrame'>
print(df)
출력 결과 :
   c0  c1  c2  c3  c4
0   1   4   7  10  13
1   2   5   8  11  14
2   3   6   9  12  15
print(df.index) #행
print(df.columns) #열
#행(index), 열 이름 변경
df.index = ['r0', 'r1', 'r2']
df.columns = ['a', 'b', 'c', 'd', 'e']
print(df)
출력 결과 :
    a  b  c   d   e
r0  1  4  7  10  13
r1  2  5  8  11  14
r2  3  6  9  12  15
df.rename(columns={'a': 'c0', 'b': 'c1', 'c': 'c2', 'd': 'c3', 'e': 'c4'}, inplace=True)
df.rename(index={'r0': 'r00', 'r1': 'r11', 'r2': 'r22'}, inplace=True)
print(df)
#df memory address
print(id(df)) #1661031989056
  • inplace=True : 원본 객체를 변경한다.
  • inplace=False : 원본 객체를 변경하지 않고, 변경된 결과를 새로운 객체에 저장한다.
tmp_df = df.rename(columns={'c0': 'a', 'c1': 'b', 'c2': 'c', 'c3': 'd', 'c4': 'e'}, inplace=False)
tmp_df = df.rename(index={'r00': 'r0', 'r11': 'r1', 'r22': 'r2'}, inplace=False)
print(tmp_df)
print(id(tmp_df)) #1661031988912

def rename(colums, inplace):
    if inplace:
        df.columns = colums
    else:
        tmp_df = df[:] #원본 복사하여 새로운 공간에 저장
        tmp_df.columns = colums
        return tmp_df

data remove

tmp_df1 = df[:]
print("remove before :: ", tmp_df1)
출력 결과 :
     c0  c1  c2  c3  c4
r00   1   4   7  10  13
r11   2   5   8  11  14
r22   3   6   9  12  15
tmp_df1.drop('r00', inplace=True)
print("index remove after :: ", tmp_df1)

행(index)에서 r00 삭제

출력 결과 :
     c0  c1  c2  c3  c4
r11   2   5   8  11  14
r22   3   6   9  12  15
tmp_df2 = df[:]
tmp_df2.drop(['r11', 'r22'], axis=0, inplace=True)
print("index remove after :: ", tmp_df2)
출력 결과 :
     c0  c1  c2  c3  c4
r00   1   4   7  10  13
drop column   
tmp_df3 = df[:]
tmp_df3.drop('c0', axis=1, inplace=True)
print("column remove after :: ", tmp_df3)
출력 결과 :
     c1  c2  c3  c4
r00   4   7  10  13
r11   5   8  11  14
r22   6   9  12  15

댓글남기기