본문 바로가기
pandas

pandas 기본

by 자동매매 2023. 11. 30.

참조 :

한 권으로 끝내는 <판다스 노트>

https://e-koreatech.step.or.kr/

 

 

Numpy 설치

!pip install numpy

 

Pandas 타입

dtype type
int64 integer
float64 decimal
object string
bool boolean
datetime64 date & time
category category

 

dict 변환

1) dict -> Series  : key -> Index

import pandas as pd
dic={'name':['hong', 'kim', 'heo'], 'kor' : [80, 90, 75],'eng' : [80, 95, 100]}
s=pd.Series(dic)
s
name    [hong, kim, heo]
kor         [80, 90, 75]
eng        [80, 95, 100]
dtype: object

 

2) dict -> DataFrame  : key -> Columns

df = pd.DataFrame(dic)
df
  name kor eng
0 hong 80 80
1 kim 90 95
2 heo 75 100

 

3) dict -> DataFrame  : key -> Columns, Index

df = pd.DataFrame(
    {
        "Name": {0: "Tom", 1: "Laura", 2: "Kevin", 3: "Julia", 4: "Jhon"},
        "Birthday": {
            0: "1997-10-10",
            1: "2002-04-18",
            2: "1981-11-12",
            3: "2000-12-31",
            4: "1999-04-09",
        },
    }
)
df
  Name Birthday
0 Tom 35713
1 Laura 37364
2 Kevin 29902
3 Julia 36891
4 Jhon 36259

 

색인 객체의 특징

  • DataFrame, Series 레코드를 고유하게 식별하는 객체
  • 식별성 데이터를 1차원 배열로 가지고 있음
  • 값의 중복을 허용하기 때문에 중복된 값을 선택하면 해당 값을 가진
  • 미리 만들어서 안전하게 공유할 수 있음
  • 변경이 불가능한 ndarray임 : 인덱스객체[인덱스번호]= 으로 수정할  없음
  • 색인 객체의 크기 변경이 불가능함
  • 순서가 있고 슬라이스가 가능함 
  • reindex 명령을 이용한 변경은 가능
함수 설명
append 색인 개체를 추가한 새로운 색인을 구함
insert 지정된 위치에 색인이 추가된 새로운 색인을 구함
difference 색인의 차집합을 구함
intersection 색인의 교집합을 구함
union 색인의 합집합을 구함
isin 색인이 존재하는지를 구함(불리언 배열)
drop 지정된 값이 삭제된 새로운 색인을 구함
delete 지정된 위치의 색인이 삭제된 새로운 색인을 구함
is_monotonic 색인이 단조성을 가지는지를 구함 (가지면 True)
is_unique 중복되는 색인이 있는지를 구함 (없으면 True)
unique 색인에서 중복 요소를 제거하고 유일한 값만 구함

 

 

# index 연산자

연산결과 : 연산대상의 마지막 객체를 기준으로 indexing

결측치 처리 : fill_value로 처리 가능

 

import pandas as pd
s1 = pd.Series({'kor':80,'eng':90,'math':85})
s2 = pd.Series({'eng':70,'kor':75})
result = s1+s2
result
eng     160.0
kor     155.0
math      NaN
dtype: float64

 

덧셈 뺄셈 곱셈 나눗셈
add sub mul div
s3 = s1.add(s2, fill_value=np.nan)
s3

 

# Series DataFrame 연산하기

  1. DataFrame의 행과 열을 통합 후 연산
  2. Series의 index를 DataFrame의 column에 맞추고 연산
  3. 짝이 안 맞으면 NaN 값을 반환
s  = pd.Series([1,2,3,4], index=['a','b','c','d'])
df = pd.DataFrame([[1,2],[3,4]],columns=['a','b'])
result = s + df
result
  a b c d
0 2 4 NaN NaN
1 4 6 NaN NaN

 

DataFrame 

pandas.DataFrame(data=None, index=Nonecolumns=None, dtype=None)

 

df = pd.DataFrame(data=[[10, 40], [20, 50], [30, 60]], index=[1, 2, 3])
df
  0 1
1 10 40
2 20 50
3 30 60

 

1) 행 추가

df=pd.DataFrame({'name':['hong',  'kim', 'heo'], 'kor' : [80, 90, 75], 'eng' : [80, 95, 100]})
df.loc[3] = ['song',100,100]
df
  name kor eng
0 hong 80 80
1 kim 90 95
2 heo 75 100
3 song 100 100

 

2) 열 추가

df['math'] = [70, 85, 90,90]
df
  name kor eng math
0 hong 80 80 70
1 kim 90 95 85
2 heo 75 100 90
3 song 100 100 90

 

3) 삭제하기  : inplace = True, 원 객체 변경 (기본값:False)

   DataFrame 객체명.drop(행 인덱스 또는 배열, axis=0inplace=True 또는 False)

df.drop(3,inplace=True)
df
  name kor eng
0 hong 80 80
1 kim 90 95
2 heo 75 100

 

4) 열 삭제하기

   DataFrame 객체명.drop(열명 또는 배열, axis=1, inplace=Tru또는 False)

df.drop('math',axis=1)
df
  name kor eng
0 hong 80 80
1 kim 90 95
2 heo 75 100

 

5) 행 선택

  1개의 행 선택 범위지정 선택
loc 이용 DataFrame 객체명.loc[선택할 행이름] DataFrame 객체명.loc[시작행이름:끝행이름]
범위의 끝을 포함
iloc 이용 DataFrame 객체명.iloc[선택할 인덱스] DataFrame 객체명.iloc[시작인덱스:끝인덱스:슬라이싱간격]
범위의 끝을 제외함
- 슬라이싱 간격은 생략할 수 있으며, 생략할 경우 1로 간주함
- 슬라이싱 간격을 -1로 지정하면 역순으로 제시됨
- 모든 행을 선택할 경우에는 시작인덱스와 끝인덱스를 지정하지 않음

 

df.loc[1:2]
  name kor eng math
1 kim 90 95 85
2 heo 75 100 90

 

df.iloc[1:3]
  name kor eng math
1 kim 90 95 85
2 heo 75 100 90

 

6) 열 선택

1개의 열 선택하기 여러 개의 열 선택하기
DataFrame 객체명[선택할 열이름] DataFrame 객체명[[선택할 열이름1, 선택할 열이름2,…]]

 

7) 원소 선택

loc 이용 DataFrame 객체명.loc[행 인덱스 혹은 행명, 열 인덱스 혹은 열명]
iloc 이용  DataFrame 객체명.iloc[행 번호, 열 번호]

 

df.loc[[1,2],'kor']
1    90
2    75
Name: kor, dtype: int64

 

8) index객체를 이용한 선택

i = df.index
i = i.drop(1)  # Int64Index([0, 2], dtype='int64')
df.loc[i]
  name kor eng math
0 hong 80 80 70
2 heo 75 100 90

 

9) 위치 변경

 

- 행위치 변경 : reindex함수 이용

DataFrame객체.reindex (새로운 인덱스 배열, fill_value=)

 

[ reindex 수행 순서 ]

기존 데이터 인덱스를 새로운 세트에 매치시켜 순서를 재조정

인덱스는 존재하나, 데이터가 없는 인덱스에 누락 값을 채움

df.reindex(index=[2, 0, 1])
  name kor eng math
2 heo 75 100 90
0 hong 80 80 70
1 kim 90 95 85

 

df.reindex([1,2,3], fill_value='nothing')
  name kor eng math
1 kim 90 95 85
2 heo 75 100 90
3 nothing nothing nothing nothing

 

 

- 열 위치 변경

df[['math','kor','name']]

 

- 행/열 위치 변경

df.T   #transpose

 

10) column -> index  : 특정열을인덱스로설정해

DataFrame객체.set_index(keys, drop=True, append=False, inplace=False)

매개변수 설명
keys 인덱스로 설정할 열 또는 열 목록
drop 기본값: True , 인덱스로 설정할 칼럼을 삭제
append 기본값: False, 기존 색인에 열을 추가할지를 지정
inplace 기본값: False, True이면 호출자 DataFrame을 제자리에서 수정

 

df.set_index('name')
  kor eng math
name      
hong 80 80 70
kim 90 95 85
heo 75 100 90

 

11) index 초기화  : reset_index함수

인덱스 값들을 DataFrame 열로 전송하며, 단순 정수 인덱스로 초기화함

DataFrame객체.reset_index (drop=True, inplace=False)

매개변수 설명
drop 기본값: True, 인덱스로 설정된 열을 DataFrame 내에서 삭제할지를 결정
inplace 기본값: False, 원본 객체를 변경할지를 결정

 

df.reset_index(drop=False,inplace=True)
  name kor eng math
0 hong 80 80 70
1 kim 90 95 85
2 heo 75 100 90

 

'pandas' 카테고리의 다른 글

데이터 전처리, 추가, 삭제, 변환  (0) 2023.12.12
복사와 결측치  (0) 2023.12.12
통계  (0) 2023.12.11
조회, 정렬, 조건필터  (0) 2023.12.11
Excel 파일 다루기  (0) 2023.12.11

댓글