pandas 기초
본문 바로가기
PYTHON/기본 문법

pandas 기초

by 공돌이삼촌 2023. 6. 2.
반응형

 
pandas는
파이썬에서 사용되는
ML 및 수치 통계의 가장 기본이 되는 라이브러리로
데이터를 처리함에 있어 매우 유용한 라이브러리이다.
 
먼저 아래와 같이 깔아주자

!pip install pandas

Series
 
series 데이터는 list와 비슷하지만
객체 타입을 보면 별도의 타입이 있듯이
조금 다른 성격을 가지고 있다.
<class 'pandas.core.series.Series'>
2차원 배열을 효율적으로 다루기 위해 최적화 된 class라고 생각하면 된다.
 

import pandas as pd

data = ['apple', 'banana', 'computer', 'domino', 'elephant']
s = pd.Series(data)
print(s)

 
DataFrame
여러개의 Series 데이터를 묶은 형태로
DataFrame을 print() 하면 자동으로 ‘행(=index)’과 ‘열(=column)’의 이름이 0번부터 번호가 매겨집니다.

data = [['John', 21, 'M'],
        ['Sara', 30, 'F'],
        ['Tom', 25, 'M'],
        ['Peter', 34, 'M']]
df = pd.DataFrame(data)
print(df)

행, 열에 각각 이름을 부여할 수 있습니다.
columns=['name', 'age', 'gender']  추가한다면 행에 쉽게 추가된 것 을 볼 수 있습니다.
 

data = [['John', 21, 'M'],
        ['Sara', 30, 'F'],
        ['Tom', 25, 'M'],
        ['Peter', 34, 'M']]
df = pd.DataFrame(data, columns=['name', 'age', 'gender'])
print(df)
data = [['John', 21, 'M'],
        ['Sara', 30, 'F'],
        ['Tom', 25, 'M'],
        ['Peter', 34, 'M']]
df = pd.DataFrame(data)

# 컬럼은 추후에 만들어줘도 괜찮습니다
df.columns = ['name', 'age', 'gender']
print(df)

먼저 데이터 프레임을 만들고 인덱스, 컬럼은 추후에 만들어줘도 괜찮습니다

index를 추가를 해보겠습니다.

data = [['John', 21, 'M'],
        ['Sara', 30, 'F'],
        ['Tom', 25, 'M'],
        ['Peter', 34, 'M']]
df = pd.DataFrame(data, columns=['name', 'age', 'gender'], index = ["1번", "2번", "3번", "4번"])
print(df)

index이름과 column이름을 추가할 때, 반드시 df의 column or index 개수와 일치해야합니다. 
그렇지 않을시 에러가 발생합니다.
 
따라서 이런  index, column 개수를 알고싶다면 shape 속성을 사용하시면 됩니다.
(index,column) 형태의 tuple로 나옵니다.

df = pd.DataFrame(data)
# (행 개수, 열 개수)
print(df.shape)

 
데이터 프레임을 행 또는 열을 추가하는 것을 다뤄보자
 
 
scores라는 column을 만들고 해당 컬럼에 리스트를 대입

scores = [9, 8, 10, 9]
df['scores']=scores
print(df)

shape를 통해 insert 이용해도된다.

scores = [9, 8, 10, 9]
df.insert(df.shape[1], 'score', scores)

print(df)

insert()
 insert(column_index, column_name, value)   # 3가지 파라미터 필요
 DataFrame에 컬럼을 한 개 추가합니다.
1은 axis 가 열기준으로 판단한다고 생각하면 되고, 0은 행기준으로 판단한다고 생각하면 된다
쉽게 기억하는 방법은 1은 일자니까 일자대로 붙는다고 생각하면 된다.
그래서 score list가 일자 형태로 데이터프레임에 추가 붙었다.

그럼 이제 행을 추가하는 상황을 고려해보자
 
 
 
 
 
 
가끔 아래와 같은 에러를 pandas 데이터프레임 사용시에 마주치는 경우가 있다.
AttributeError: 'DataFrame' object has no attribute 'append'
 
 
 
 
 
 
 
데이터프레임을 합칠때 concat을 주로 사용한다.
concat( 합성할 DataFrame들 리스트, axis=0 or 1)


axis=0 : 상, 하 방향 합성 / column명이 같으면 한 column으로 합성
axis=1 : 좌, 우 방향 합성 / index명이 같으면 한 index로 합성
axis 파라미터는 pandas의 많은 함수들에서 등장합니다. 
axis=0 이라면 ‘행(index)’관련, axis=1 이라면 ‘열(columns)’관련 일을 처리한다고 생각하시면 됩니다.
 
 
만약 인덱스가 다른 상태에서 합쳐진다
빈 칸은 NaN(=None =Null)으로 채워짐
con_df = pd.concat([df1, df2], axis=1)

 
합성된 모양은 원하는 모양과 일치하지만, index가 이상한 것을 확인할 수 있습니다.

ignore_index=True 옵션을 전달하면 합성하려는
 모든 DataFrame들의 index를 무시하고 0부터 차례대로 index 번호를 부여합니다.
 (default 값은 False)
 

con_df = pd.concat([df1, df2], axis=0, ignore_index=True)
print(con_df)

 

ignore_index= False(왼쪽),True(오른쪽)

 
DataFrame 내용 삭제

pd.drop()
행 삭제 pd.drop( [삭제하고자 하는 행 이름들], axis=0 )
열 삭제 pd.drop( [삭제하고자 하는 열 이름들], axis=1 )
 
원본 훼손 방지를 위해 깊은 복사 이용
df = con_df.copy()
 
 
만약 column명을 하나하나 명시하기 귀찮다면 
다음과 같이 할 수 있습니다.

df.columns ⇒ 컬럼명을 반복가능한 객체에 담아 반환
df.columns[n:m+1] ⇒ list 슬라이싱과 동일하게 
n번째 컬럼~m번째 컬럼만을 슬라이싱하여 반환 
(참고: 여기서 말하는 n번째는 list인덱스와 동일하게 0번부터 시작하는 번호입니다.)
 
 
csv 혹은 excel 데이터 DataFrame으로 불러오기

 
 
 
iloc함수로 입맛에 맞게 DataFrame 재구성하기
 
df.iloc[ 행 슬라이싱, 열 슬라이싱 ] ⇒ ( ) 가 아닌 [ ] 를 사용합니다.
‘행 슬라이싱’ 혹은 ‘열 슬라이싱’ 부분에는 파이썬의 슬라이싱 기법을 사용하시면 됩니다.
슬라이싱할 수 있는 형태는 2가지가 있음. **[start:end] 형태**와 **[start: end: step] 형태**

[start:end] 형태
  [:5] ⇒ 처음부터 4번째까지 즉, 0 1 2 3 4 를 뜻함
  [4: -2] ⇒ 4번부터 뒤에서 3번째까지
[start: end: step] 형태
  [1:7:2] ⇒ 1부터 6까지 2씩 건너뛰며 슬라이싱 즉, 1 3 5 를 뜻함
  [:10:3] ⇒ 처음부터 9까지 3씩 건너뛰며 슬라이싱 즉, 0 3 6 9 를 뜻함
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

반응형

댓글