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 |