Programming/Python

Python - Pandas 기본

wave35 2024. 9. 18. 23:08

1.Basic

데이터 프레임 만들기

import pandas as pd
df1 = pd.DataFrame(
    [[3,2,5],[10,0,2],[6,5,3]],
    columns=["사과", "자두", "포도"],
    index=["이성계", "김유신", "이순신"]
)

 

values, index, columns

df1.values
# array([[ 3,  2,  5],
#        [10,  0,  2],
#        [ 6,  5,  3]])

df1.index
# Index(['이성계', '김유신', '이순신'], dtype='object')

df1.columns
# Index(['사과', '자두', '포도'], dtype='object')


## numpy와 같이 pandas도 value를 조건에 따라 boolean 형태로 결과값을 내기 쉬움

df1.sum()
# 사과    19
# 자두     7
# 포도    10
# dtype: int64

df1.values > 3
# array([[False, False,  True],
#        [ True, False, False],
#        [ True,  True, False]])

df1 > 3
#        사과    자두   포도
# 이성계 False False  True
# 김유신  True False False
# 이순신  True  True False

 

2.Indexing

loc, iloc, drop

# 예제
import pandas as pd
import numpy as np
a = np.random.randint(0,10,24).reshape(4,6)
df = pd.DataFrame(a, index=list("가나다라"), columns=list("ABCDEF"))


## df["열이름"] : 열만가능
df["A"]
# 가    5
# 나    7
# 다    7
# 라    9
# Name: A, dtype: int64


## 여러개의 열 조회
df[["A","B","C"]]
#    A	B	C
# 가	 5	7	1
# 나	 7	3	9
# 다	 7	3	4
# 라	 9	5	6


## 열과 행을 모두 조회할 수 있는 loc / iloc 메소드

# df.loc["행이름", "열이름"]
df.loc["가":"다", "A":"D"]
#    A	B	C	D
# 가  5	7	1	5
# 나  7	3	9	3
# 다  7	3	4	9

df.loc["가":"다", ["A","B","A"]]
#    A	B	A
# 가  5	7	5
# 나	 7	3	7
# 다	 7	3	7

# df.iloc[행번호, 열번호]
df.iloc[0:3,[0,1,0]]
#    A	B	A
# 가  5	7	5
# 나	 7	3	7
# 다	 7	3	7


## drop 함수
df.drop("D", axis=1) # 행=0(default), 열=1
# 	A	B	C	E	F
# 가	5	7	1	5	2
# 나	7	3	9	9	0
# 다	7	3	4	6	3
# 라	9	5	6	4	4


## 문제 : B,D,E,F열과 가,나,다 행의 자료를 추출하라
df.iloc[:3, 1:].drop("C", axis=1)

 

3.Ordering

- df.sort_values([col1, col2, colN...], ascending=bool)

- ascending = 0 내림차순, ascending = 1 오름차순

## 예제 코드
import pandas as pd
a1 = [60, 84, 80, 70, 19]
a2 = [77, 62, 95, 85, 17]
a3 = [61, 97, 72, 67, 15]
a4 = [75, 65, 95, 51, 18]
cols = ["국어", "영어", "수학", "과학", "나이"]
df = pd.DataFrame([a1, a2, a3, a4], index=list("ABCD"), columns=cols)


## [1] 1개의 열을 기준으로 오름차순, 내림차순
df.sort_values("국어") # 오름
df.sort_values("영어", ascending=False) # 내림


## [2] 2개 이상의 열을 기준으로 정렬 (리스트 형식으로 파라미터)
df.sort_values(["수학", "영어"], ascending=False)


## [3] 2개 이상의 열기준 오름&내림 혼합
df.sort_values(["수학", "나이"], ascending=[0, 1])

 

4.Calculating

- df1.add(df2, axis=1)

- axis = 1 행, axis = 0 열

## numpy의 연산은 똑같은 배열의 크기 일 때 가능하지만, 
## 열의 크기가 같을 때 행은 자동적으로 확장한다.
# 0 1 2     0 1 2     0 1 4
# 1 2 3  X         =  0 2 6
# 2 3 4               0 3 8


## pandas는 열의 자리가 달라도 라벨링 되어있기에 열의 자리는 중요하지 않다.
# A B C     B A       A   B   C
# 0 1 2     1 0       0   1 nan
# 1 2 3  X  1 0  =    0   2 nan
# 2 3 4             nan nan nan


## 예제
import pandas as pd
a1 = [[1,2,3], [4,5,6], [7,8,9]]
df1 = pd.DataFrame(a1, columns=list("ABC"), index=list("가나다"))
df2 = df1.reindex(columns=list("BCA"), index=list("나다가")).copy()
sr1 = df1.loc["가"]
df3 = df1.iloc[:2,:2]


## [1] 기본 예제
df1 + df3
#     A    B    C
#가	2.0	 4.0  NaN
#나	8.0	10.0  NaN
#다	NaN	 NaN  NaN


## [2] fill_value : NaN일 때의 기본값을 정하고 싶을 때
df1.add(df3, fill_value=0)
#   A	B	C
#가	2.0	4.0	 3.0
#나	8.0	10.0 6.0
#다	7.0	8.0	 9.0


## [3] 행(1)과 열(0)을 기준으로 broadcasting 연산
df1.add(sr1, axis=1)
#    A   B   C
# 가  2   4   6
# 나  5   7   9
# 다  8  10  12

 

 

참조 : 

https://www.youtube.com/watch?v=SVjKsvvhWlQ&list=PLrpXwtuxGqcIIf_SpCWg04MoHf1yJUCvi&index=1