ThLee
ThLee의 기록장
ThLee
전체 방문자
오늘
어제
  • 분류 전체보기 (137)
    • 정보처리기사 (13)
    • 알고리즘&문제 (5)
    • 인공지능 (4)
    • 자연어처리(NLP) (6)
    • 파이썬 (24)
    • 앱인벤터 강좌 (21)
    • 리눅스 (4)
    • 프로젝트 (1)
    • (App)톡분석AI (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 블록코딩
  • 앱인벤터 무료
  • 정보처리기사 정리
  • 인공지능
  • 정보처리기사
  • 파이썬 넘파이
  • 정보처리기사 실기
  • 앱인벤터 강좌
  • Python
  • AI
  • 앱인벤터 블로그
  • 어플
  • 파이썬
  • 딥러닝
  • 판다스
  • 넘파이
  • 앱인벤터
  • 정처기
  • 블로그
  • 정보처리기사 실기 정리

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ThLee

ThLee의 기록장

[파이썬] 판다스(Pandas) 메서드 실습
파이썬

[파이썬] 판다스(Pandas) 메서드 실습

2022. 4. 18. 16:48
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
    '파이썬' 카테고리의 다른 글
    • [파이썬] 코랩(Colab)과 구글드라이브 연동하기(마운트)
    • [파이썬] 판다스 캐글 타이타닉 데이터 불러와 맛만 보기
    • [파이썬] OOP 객체 지향 프로그래밍
    • [파이썬] 넘파이(Numpy) 메서드 실습
    ThLee
    ThLee
    # 포트폴리오 https://thleewave.notion.site/ThLee-1fef9e057dbf40d5b7b851ab0abccf36?pvs=4 #Github - https://github.com/git-ThLee #IoT 스타트업 -Full-stack -2021.01~2021.07 -사용기술 : fluterr, arduino, node.js #코딩학원 강사 - 2019.11 ~ 진행중 - 언어 : python, 블록 코딩 - 플랫

    티스토리툴바