728x90
판다스 라이브러리
# 실습에서는 넘파이도 사용함으로 넘파이 라이브러리 임포트
import pandas as pd
import numpy as np
Series 생성
- 어떤 데이터 타입이든 보유할 수 있는 레이블링된 1차원 배열.
- np.nan : Not a Number의 약자, 표현되지 않는 부동소수점 값으로 파이썬에서는 float 타입이 된다. 무한대끼리의 나눗셈, 덧셈 등 다양한 방법을 통해 NaN을 생성할 수 있고, NaN이 피연산자로 포함되는 어떠한 연산도 결과는 NaN이 된다.
# s는 1, 3, 5, np.nan, 6, 8을 원소로 가지는 pandas.Series
print(pd.Series([1, 3, 5, np.nan, 6, 8]))
>>>
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
DataFrame 생성
- 2차원 테이블 데이터구조를 가지는 자료형.
- Seriese와 함께 판다스의 주요 데이터 유형 중 하나.
- Seriese 객체를 모아둔 자료구조.
# 12x4 행렬에 1부터 48까지의 숫자를 원소를 가지고, index는 0부터 시작하고, coulmns은 순서대로 X1, X2, X3, X4로 하는 DataFrame 생성
df = pd.DataFrame(data=np.arange(1, 49).reshape(12, 4),
index = np.arange(12),
columns=["X1", "X2", "X3", "X4"])
print(df)
>>>
X1 X2 X3 X4 <- columns
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
3 13 14 15 16
4 17 18 19 20
5 21 22 23 24
6 25 26 27 28
7 29 30 31 32
8 33 34 35 36
9 37 38 39 40
10 41 42 43 44
11 45 46 47 48
↑
index
DataFrame Index (인덱스)
# dataframe index
print(df.index)
>>>
Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], dtype='int64')
DataFrame Columns (컬럼)
# dataframe columns
print(df.columns)
>>> Index(['X1', 'X2', 'X3', 'X4'], dtype='object')
DataFrame Values (데이터)
# dataframe values
print(df.values)
>>>
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16],
[17, 18, 19, 20],
[21, 22, 23, 24],
[25, 26, 27, 28],
[29, 30, 31, 32],
[33, 34, 35, 36],
[37, 38, 39, 40],
[41, 42, 43, 44],
[45, 46, 47, 48]])
특정 column 가져오기
# 특정 column을 가져오기
print(df["X2"])
>>>
0 2
1 6
2 10
3 14
4 18
5 22
6 26
7 30
8 34
9 38
10 42
11 46
Name: X2, dtype: int64
특정 column에 2 더하기
# X1 column에 2 더하기
print(df["X1"] + 2)
>>>
0 3
1 7
2 11
3 15
4 19
5 23
6 27
7 31
8 35
9 39
10 43
11 47
Name: X1, dtype: int64
DataFrame 기초 메서드(Method)
예제에 사용될 df입니다.
df = pd.DataFrame(data=np.arange(1, 49).reshape(12, 4),
index = np.arange(12),
columns=["X1", "X2", "X3", "X4"])
print(df)
>>>
X1 X2 X3 X4
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
3 13 14 15 16
4 17 18 19 20
5 21 22 23 24
6 25 26 27 28
7 29 30 31 32
8 33 34 35 36
9 37 38 39 40
10 41 42 43 44
11 45 46 47 48
head()
- dataframe의 맨 위 5줄을 보여준다
- head(숫자) : 숫자만큼 맨위에서부터 보여준다
# dataframe의 맨 위 다섯줄을 보여주는 head() --> 5줄 display
print(df.head())
>>>
X1 X2 X3 X4
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
3 13 14 15 16
4 17 18 19 20
print(df.head(10))
>>>
X1 X2 X3 X4
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
3 13 14 15 16
4 17 18 19 20
5 21 22 23 24
6 25 26 27 28
7 29 30 31 32
8 33 34 35 36
9 37 38 39 40
tail()
- dataframe의 맨 아래 5줄을 보여준다
print(df.tail())
>>>
X1 X2 X3 X4
7 29 30 31 32
8 33 34 35 36
9 37 38 39 40
10 41 42 43 44
11 45 46 47 48
info()
- dataframe에 대한 전체적인 요약 정보를 보여준다
# dataframe에 대한 전체적인 요약정보를 보여줍니다. index, columns, null/not-null/dtype/memory usage가 표시됩니다.
print(df.info())
>>>
<class 'pandas.core.frame.DataFrame'>
Int64Index: 12 entries, 0 to 11
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 X1 12 non-null int64
1 X2 12 non-null int64
2 X3 12 non-null int64
3 X4 12 non-null int64
dtypes: int64(4)
memory usage: 480.0 bytes
None
describe()
- dataframe에 대한 전체적인 통계 정보를 보여준다
# dataframe에 대한 전체적인 통계정보를 보여줍니다.
print(df.describe())
>>>
X1 X2 X3 X4
count 12.000000 12.000000 12.000000 12.000000
mean 23.000000 24.000000 25.000000 26.000000
std 14.422205 14.422205 14.422205 14.422205
min 1.000000 2.000000 3.000000 4.000000
25% 12.000000 13.000000 14.000000 15.000000
50% 23.000000 24.000000 25.000000 26.000000
75% 34.000000 35.000000 36.000000 37.000000
max 45.000000 46.000000 47.000000 48.000000
sort_values()
- 정렬
- ascending = False : 내림차순
- ascending = True : 오름차순
# X2 column를 기준으로 내림차순 정렬
print(df.sort_values(by="X2", ascending= False))
>>>
X1 X2 X3 X4
11 45 46 47 48
10 41 42 43 44
9 37 38 39 40
8 33 34 35 36
7 29 30 31 32
6 25 26 27 28
5 21 22 23 24
4 17 18 19 20
3 13 14 15 16
2 9 10 11 12
1 5 6 7 8
0 1 2 3 4
예제에 사용되는 df입니다.
df = pd.DataFrame(data=np.arange(1, 49).reshape(12, 4),
index = np.arange(12),
columns=["X1", "X2", "X3", "X4"])
print(df)
>>>
X1 X2 X3 X4
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
3 13 14 15 16
4 17 18 19 20
5 21 22 23 24
6 25 26 27 28
7 29 30 31 32
8 33 34 35 36
9 37 38 39 40
10 41 42 43 44
11 45 46 47 48
Fancy Indexing
- 전체 데이터에서 원하는 일부의 데이터를 찾아오는 방법
# pandas dataframe은 column 이름을 이용하여 기본적인 Indexing이 가능합니다.
# X1 column을 indexing
print(df["X1"])
>>>
0 1
1 5
2 9
3 13
4 17
5 21
6 25
7 29
8 33
9 37
10 41
11 45
Name: X1, dtype: int64
print(df.X1)
>>>
0 1
1 5
2 9
3 13
4 17
5 21
6 25
7 29
8 33
9 37
10 41
11 45
Name: X1, dtype: int64
# dataframe에서 slicing을 이용하면 row 단위로 잘려나옵니다.
# 앞에서 3줄을 slicing 합니다.
print(df[:3])
>>>
X1 X2 X3 X4
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
loc[숫자]
- loc[0] : 0번 인덱스에 대한 데이터들을 불러옴
# df에서 index value를 기준으로 indexing도 가능합니다. (여전히 row 단위)
print(df.index[0])
>>> 0
print(df.loc[0])
>>>
X1 1
X2 2
X3 3
X4 4
Name: 0, dtype: int64
# df.loc는 특정값을 기준으로 indexing합니다. (key - value)
print(df.loc[7])
>>>
X1 29
X2 30
X3 31
X4 32
Name: 7, dtype: int64
# df.loc에 2차원 indexing도 가능합니다.
print(df.loc[4,"X2"])
>>> 18
print(df.loc[9, "X4"])
>>> 40
print(df.loc[ 3:5 , ["X1","X2"]])
>>>
X1 X2
3 13 14
4 17 18
5 21 22
print(df.loc[ 3:5 , "X2" : "X4"])
>>>
X2 X3 X4
3 14 15 16
4 18 19 20
5 22 23 24
print(df.loc[ [0,1,4,6,10], ["X1","X3"]])
>>>
X1 X3
0 1 3
1 5 7
4 17 19
6 25 27
10 41 43
3의 배수만 출력하기
## dataframe에 조건식을 적용해주면 조건에 만족하는지 여부를 알려주는 "mask"가 생깁니다.
# Q. df에서 X3 column에 있는 원소들중에 3의 배수만 출력해주세요!
print(df[df["X3"] % 3 == 0])
>>>
X1 X2 X3 X4
0 1 2 3 4
3 13 14 15 16
6 25 26 27 28
9 37 38 39 40
iloc[]
# 2차원 리스트 indexing과 같은 원리가 되었습니다.
# integer-location based indexing
print(df.iloc[5])
>>>
X1 21
X2 22
X3 23
X4 24
Name: 5, dtype: int64
# iloc로 2차원 indexing을 하게되면, row 기준으로 index 3,4를 가져오고 column 기준으로 0, 1을 가져옵니다.
print(df.iloc[ [3,4], [0,1] ])
>>>
X1 X2
3 13 14
4 17 18
print(df.loc[ [3,4] , [0, 1]) # iloc[] vs loc[] 차이
>>> error
KeyError: "None of [Int64Index([0, 1], dtype='int64')] are in the [columns]"
iloc[] 응용
# Q. 2차원 indexing에 뒤에가 : 면 어떤 의미일까요?
print(df.loc[3:10, :])
>>>
X1 X2 X3 X4
3 13 14 15 16
4 17 18 19 20
5 21 22 23 24
6 25 26 27 28
7 29 30 31 32
8 33 34 35 36
9 37 38 39 40
10 41 42 43 44
print(df.loc[:, "X1" : "X2"])
>>>
X1 X2
0 1 2
1 5 6
2 9 10
3 13 14
4 17 18
5 21 22
6 25 26
7 29 30
8 33 34
9 37 38
10 41 42
11 45 46
print(df.iloc[:, 0:1])
>>>
X1
0 1
1 5
2 9
3 13
4 17
5 21
6 25
7 29
8 33
9 37
10 41
11 45
print(df.iloc[0:3,0:2])
>>>
X1 X2
0 1 2
1 5 6
2 9 10
DataFrame 합치기
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']},
index=[4, 5, 6, 7])
df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']},
index=[8, 9, 10, 11])
how = "outer"
# SQL과 같이 join operation을 사용할 수 있다.
print(pd.merge(df1, df2, on="A", how="outer"))
>>>
A B_x C_x D_x B_y C_y D_y
0 A0 B0 C0 D0 NaN NaN NaN
1 A1 B1 C1 D1 NaN NaN NaN
2 A2 B2 C2 D2 NaN NaN NaN
3 A3 B3 C3 D3 NaN NaN NaN
4 A4 NaN NaN NaN B4 C4 D4
5 A5 NaN NaN NaN B5 C5 D5
6 A6 NaN NaN NaN B6 C6 D6
7 A7 NaN NaN NaN B7 C7 D7
how = "left"
# left join
print(pd.merge(df2,df3, on="A", how="left"))
>>>
A B_x C_x D_x B_y C_y D_y
0 A4 B4 C4 D4 NaN NaN NaN
1 A5 B5 C5 D5 NaN NaN NaN
2 A6 B6 C6 D6 NaN NaN NaN
3 A7 B7 C7 D7 NaN NaN NaN
concat()
# 그냥 합치기 (concatenation)
print(pd.concat([df1,df2,df3])) # 세로
>>>
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
8 A8 B8 C8 D8
9 A9 B9 C9 D9
10 A10 B10 C10 D10
11 A11 B11 C11 D11
print(pd.concat([df1,df2,df3], axis= 1)) # 가로
>>>
A B C D A B C D A B C D
0 A0 B0 C0 D0 NaN NaN NaN NaN NaN NaN NaN NaN
1 A1 B1 C1 D1 NaN NaN NaN NaN NaN NaN NaN NaN
2 A2 B2 C2 D2 NaN NaN NaN NaN NaN NaN NaN NaN
3 A3 B3 C3 D3 NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN A4 B4 C4 D4 NaN NaN NaN NaN
5 NaN NaN NaN NaN A5 B5 C5 D5 NaN NaN NaN NaN
6 NaN NaN NaN NaN A6 B6 C6 D6 NaN NaN NaN NaN
7 NaN NaN NaN NaN A7 B7 C7 D7 NaN NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN NaN NaN A8 B8 C8 D8
9 NaN NaN NaN NaN NaN NaN NaN NaN A9 B9 C9 D9
10 NaN NaN NaN NaN NaN NaN NaN NaN A10 B10 C10 D10
11 NaN NaN NaN NaN NaN NaN NaN NaN A11 B11 C11 D11
728x90
'파이썬' 카테고리의 다른 글
[파이썬] 코랩(Colab)과 구글드라이브 연동하기(마운트) (0) | 2022.04.21 |
---|---|
[파이썬] 판다스 캐글 타이타닉 데이터 불러와 맛만 보기 (0) | 2022.04.19 |
[파이썬] OOP 객체 지향 프로그래밍 (0) | 2022.04.18 |
[파이썬] 넘파이(Numpy) 메서드 실습 (0) | 2022.04.15 |
[파이썬] 판다스(Pandas) 란 (0) | 2022.04.15 |