SKN/04. Data Analysis

03. pandas overview

claovy☘️ 2025. 3. 4. 17:08

1. pandas 활용

01. Series 생성

list 활용
# 파이썬 list 활용
stocks = ['NVDA', 'MSFT', 'AAPL', 'GooG', 'TSLA']
stocks_ser = pd.Series(stocks)
print(type(stocks_ser))
print(stocks_ser[0])

stocks_ser.name = '미국 주식'
print(stocks_ser)

[출력]
<class 'pandas.core.series.Series'>
NVDA
0    NVDA
1    MSFT
2    AAPL
3    GooG
4    TSLA
Name: 미국 주식, dtype: object
ndarray 활용
nums_ser = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
print(nums_ser)
print(nums_ser[2], nums_ser['c']) # 숫자, 문자로도 인덱스에 접근 가능

[출력]
a    1.264245
b    0.079425
c   -0.030513
d   -1.272858
e    2.743981
dtype: float64
-0.030512552354516973 -0.030512552354516973
# iloc : 문자 인덱스를 통한 참조
# loc : 숫자를 통한 참조

print(nums_ser.iloc[2],nums_ser.loc['c'])

[출력]
# dictionary 활용
dictionary 활용
info = {
    'a' : 10,
    'b' : 20,
    'c' : 30
}
info_ser = pd.Series(info)
print(info_ser)

info_ser.index = ['A', 'B', 'C']
print(info_ser


[출력]
a    10
b    20
c    30
dtype: int64

A    10
B    20
C    30
dtype: int64
scalar value 활용
num_ser = pd.Series(5.5)
num_ser = pd.Series(5.5, index=['a', 'b', 'c', 'd', 'e'])
print(num_ser)

[출력]
a    5.5
b    5.5
c    5.5
d    5.5
e    5.5
dtype: float64

 

02. Series 속성

#pandas 테이블 만들기
movies = ['백수아파트', '미키17', '캡틴아메리카', '나이브스아웃', '퇴마록']
movies_ser = pd.Series(movies)
movies_ser 

[출력]
0     백수아파트
1      미키17
2    캡틴아메리카
3    나이브스아웃
4       퇴마록
dtype: object

 

(1) values

movies_ser.values

[출력]
array(['백수아파트', '미키17', '캡틴아메리카', '나이브스아웃', '퇴마록'], dtype=object)

(2) array

movies_ser.array

[출력]
<NumpyExtensionArray>
['백수아파트', '미키17', '캡틴아메리카', '나이브스아웃', '퇴마록']
Length: 5, dtype: object

(3) index

# index를 별도 지정하지 않은 경우 기본적으로 숫자 인덱스
movies_ser.index = ['1st','2nd','3rd','4th','5th']
movies_ser.index

[출력]
Index(['1st', '2nd', '3rd', '4th', '5th'], dtype='object')

(4) dtype, shape, ndim, size

print(movies_ser.dtype) # 요소의 자료형
print(movies_ser.shape) # 요소의 형태 
print(movies_ser.ndim)  # 요소의 차원 
print(movies_ser.size)  # 요소의 개수 

[출력]
object
(5,)
1
5

(5) is_unique

  • 고윳값 확인
# 시리즈의 값이 모두 고유한 값인지 여부 (True : 중복 값이 없음 / False : 중복 값이 있음)
print(movies_ser.is_unique)

[출력]
True

 

03. Series 메서드

(1) sum, product, mean

nums_ser = pd.Series([2025, 3, 4, 12, 41])

print(nums_ser.sum()) # 누적합 / 총합 
print(nums_ser.product()) # 누적곱 
print(nums_ser.mean()) # 평균 

[출력]
2085
11955600
417.0

 

(2) head, tail

print(nums_ser.head(2))	# 요소의 앞의 2개
print(nums_ser.tail(2))	# 요소의 뒤에 2개

[출력]
0    2025
1       3
dtype: int64

3    12
4    41
dtype: int64

 

(3) info, describe

nums_ser.info() # 메타데이터 읽어오는 메소드
nums_ser.describe() # 데이터 개요 읽어오는 메소드

[출력]
<class 'pandas.core.series.Series'>
RangeIndex: 5 entries, 0 to 4
Series name: None
Non-Null Count  Dtype
--------------  -----
5 non-null      int64
dtypes: int64(1)
memory usage: 172.0 bytes


count       5.000000
mean      417.000000
std       899.031423
min         3.000000
25%         4.000000
50%        12.000000
75%        41.000000
max      2025.000000
dtype: float64

 

01. 데이터 프레임 생성

dictionary - list 활용
data = {
    'one' : [1, 2, 3, 4, 5],
    'two' : ['가','나','다','라','마'],
    'three' : [1.23, 2.34, 3.45, 4.56, 5.67],
    'four' : True

}

pd.DataFrame(data)

[출력]
	one	two	three	four
0	1	가	1.23	True
1	2	나	2.34	True
2	3	다	3.45	True
3	4	라	4.56	True
4	5	마	5.67	True

 

list -dictionary 활용
data = [
    {'a': 1, 'b' : 2, 'c' : 3},
    {'b' : 5, 'c' : 6},
    {'a': 7, 'b' : 8, 'c' : 9}
]

df = pd.DataFrame(data)

df.index = ['토끼','판다','코알라']  # 인덱스와 
print(df.index)

df.columns = ['협동심','성실도','인내심'] # 컬럼 지정
print(df.columns)

df

[출력]
Index(['토끼', '판다', '코알라'], dtype='object')
Index(['협동심', '성실도', '인내심'], dtype='object')

	협동심	성실도	인내심
토끼	1.0	   2	  3
판다	NaN	   5      6
코알라	7.0	   8      9

 

 

2차원 ndarray 활용
arr = np.random.randn(2,3)
df = pd.DataFrame(arr)
# df = pd.DataFrame(arr, index=['ㄱ','ㄴ'], columns=['A','B','C'])

df.index = ['ㄱ','ㄴ']
df.columns = ['A','B','C']

df

주석처럼, dataframe을 만들 때 index와 colums을 지정할 수 있다.

 

[출력]

 

02. 데이터 프레임 인덱싱/슬라이싱

dataframe을 다양하게 인덱싱, 슬라이싱 해보자!

# 은행손님 데이터 생성
bank_client_df = pd.DataFrame({
    'Client ID': [1, 2, 3, 4],
    'Client Name': ['Aly', 'Steve', 'Nicole', 'Morris'],
    'Net worth [$]': [35000, 3000, 100000, 2000],
    'Years with bank': [4, 7, 10, 15]
})

bank_client_df
# fancy indexing을 통한 조회는 결과가 1개여도 Dataframe 타입으로 변환
# -> Series로 반환한다는 것은 차원을 축소(제거)하는 것 
# DataFrame을 반환한다는 것은 차원을 유지하는 것
# 필요에 따라 fancy indexing과 그냥 indexing을 사용할 줄 알자!! 

type(bank_client_df.iloc[[2]].shape) # fancy 인덱싱 
type(bank_client_df.iloc[2].shape) # 그냥 인덱싱 (두 가지 인덱싱 구분하기)
bank_client_df.iloc[[2]], type(bank_client_df.iloc[[2]])

[출력]
(   Client ID Client Name  Net worth [$]  Years with bank
 2          3      Nicole         100000               10,
 pandas.core.frame.DataFrame)

=> 2차원 indexing은 차원이 축소되고, slicing은 차원이 유지된다!!!

'SKN > 04. Data Analysis' 카테고리의 다른 글

05. matplotlib  (0) 2025.03.06
04. 데이터 결측치 확인  (0) 2025.03.06
02. numpy [통계] [정렬] [병합]  (0) 2025.02.28
01. numpy overview  (1) 2025.02.28