Recent Posts
Recent Comments
Link
Today
Total
03-11 06:38
관리 메뉴

Hippo's data

Pandas판다스 라이브러리-1 본문

Python

Pandas판다스 라이브러리-1

Hippo's data 2023. 9. 12. 22:44
728x90

오늘의 포스팅은 판다스Pandas 라이브러리입니다!!

pandas는 python data analysis library 약자인데요
판다스... 판다 아니고 데이터분석을 위한 파이썬 라이브러리 입니다
데이터를 분석하기위해 데이터 구조를 쉽게 변형시키기 때문에 머신러닝이나 딥러닝분야를 공부하면 필수로 알아야하는 라이브러리 입니다
 
 오늘은 책 <모두의 딥러닝-개정3판> 부록을 참고하여 많이 사용하는 판다스 공식들을 알아보겠습니다 

 

목차

A. 데이터 만들기
B. 데이터 정렬하기
C. 행 추출하기
D. 열 추출하기
E. 행과 열 추출하기
F. 중복 데이터 다루기
G. 데이터 파악하기
H. 결측치 다루기
I. 새로운 열 만들기
J. 행과 열의 변환
K. 시리즈 데이터 연결하기
L. 데이터 프레임 연결하기
M. 데이터 병합하기
N.  데이터 가공하기
O. 그룹별로 집계하기

 


판다스는 기본적으로 두가지 데이터 유형으로 분석을 진행하는데요 
1. Pandas Series(1차원)
2. Pandas DataFrame(1차원이상)
 
먼저 판다스를 알아보기 전에 
판다스 데이터 구조인 Series와 DataFrame에 대해 알아보겠습니다 
 
# Series 시리즈 데이터란?
인덱싱된 1차원 배열 -> 인덱스 접근 가능 / 모든 데이터 유형 저장 가능  
cf) 엑셀시트 한 열과 유사 
행 이름, 열 이름 입력가능
 
# 시리즈 데이터 예제
 
리스트형식으로 만들기

s = pd.Series(['a','b','c'])
print(s)

0    a
1    b
2    c
dtype: object
 
딕셔너리 형식으로 만들기 

s = pd.Series({'a':2,'b':3,'c':4})
print(s)

a    2
b    3
c    4
dtype: int64
 
인덱스값, 밸류값 추출 

s.index

Index(['a', 'b', 'c'], dtype='object')

s.values

array([2, 3, 4], dtype=int64)
 
*** 명시적 인덱스 -> 해당 인덱스 값으로 접근
*** 묵시적 인덱스 -> 인덱스 위치(번호)로 접근 

s['a'] # 명시적 인덱스 - 인덱스 값으로 으로 밸류값 접근  =  파이썬 딕셔너리와 유사
s[0] # 묵시적 인덱스 - 인덱스 번호로도 접근 가능

-> 시리즈 데이터는 명시적, 묵시적 인덱스 둘다 가능함
 
# DataFrame데이터프레임 데이터란?
-> 시리즈 데이터를 한 열로 취급한 집합
-> 열마다 서로 다른 데이터 타입 가질 수 있음
 
# Pandas판다스 실습 

!pip install pandas

-> 판다스 설치 (주피터 노트북유형에서 설치시 앞에 ! 붙이기)

 

A. 데이터 만들기
1. 판다스 라이브러리 불러오기

import pandas as pd

2. 데이터 프레임 만들기

df = pd.DataFrame(              # df라는 변수에 데이터 프레임을 담아 줍니다.
        {"a" : [4 ,5, 6, 7],    # 열 이름을 지정해 주고 시리즈 형태로 데이터를 저장합니다.
        "b" : [8, 9, 10, 11],
        "c" : [12, 13, 14, 15]},
        index = [1, 2, 3, 4])   # 인덱스는 1,2,3으로 정해 줍니다.

3. 데이터 프레임 출력

df

4. 데이터의 열 이름을 따로 지정해서 만들기

df = pd.DataFrame(
        [[4, 8, 12],
        [5, 9, 13],
        [6, 10, 14],
        [7, 11, 15]],
        index=[1, 2, 3, 4],
        columns=['a', 'b', 'c'])  # 열 이름을 따로 정해줄 수 있습니다.
df

5. 인덱스가 두 개인 데이터 프레임 만들기

df = pd.DataFrame(
    {"a" : [4 ,5, 6, 7],
     "b" : [8, 9, 10, 11],
     "c" : [12, 13, 14, 15]},
    index = pd.MultiIndex.from_tuples(      # 인덱스를 튜플로 지정합니다.
        [('d', 1), ('d', 2), ('e', 1), ('e', 2)],
        names=['n', 'v']))                  # 인덱스 이름을 지정합니다.
df

B. 데이터 정렬하기
6. 특정 열의 값을 기준으로 정렬하기

df.sort_values('a', ascending=False)  # ascending=False를 적어주면 역순으로 정렬합니다.

-> ascending=False  역순정렬     (ascending -> 오름차순)

7. 열 이름 변경하기

df.rename(columns = {'c':'d'})  #c 열의 이름을 d로 변경합니다.

8. 인덱스 값 초기화하기

df.reset_index()

9. 인덱스 순서대로 정렬하기

df.sort_index()

10. 특정 열 제거하기

df.drop(columns=['a', 'b'])

C. 행 추출하기
11. 맨 위의 행 출력하기

df.head(2)  # 2행을 출력합니다.

12. 맨 아래 행 출력하기

df.tail(2)  # 2행을 출력합니다.

13. 특정 열의 값을 통해 추출하기

df[df["a"] > 4]          # a열 중 4보다 큰 값이 있을 경우 해당 행을 추출합니다.

14. 특정 열에 특정 값이 있을 경우 추출하기

df[df["a"] == 6]       # a열 중 6이 있을 경우 해당 행을 추출합니다.

15. 특정 열에 특정 값이 없을 경우 추출하기

df[df["a"] != 5]        # a열 중 5가 없을 경우 해당 행을 추출합니다.

16. 특정 열에 특정 숫자가 있는지 확인하기

df[df['a'].isin([4])]  # 원하는 숫자를 리스트([int]) 형식으로 써줍니다.

17. 특정 비율로 데이터 샘플링하기

df.sample(frac=0.75)  # 실행할 때마다 정해진 비율 만큼 랜덤하게 추출합니다.

18. 특정 개수 만큼 데이터 샘플링하기

df.sample(n=3)  # 실행할 때마다 n에서 정한 만큼 랜덤하게 추출합니다.

-> 3개 랜덤한 행 추출

19. 특정 열에서 큰 순서대로 불러오기

df.nlargest(3,'a')   # a열에서 큰 순서대로 3개를 불러와 보겠습니다.

20. 특정 열에서 작은 순서대로 불러오기

df.nsmallest(3,'a')   # a열에서 작은 순서대로 3개를 불러와 보겠습니다.

D. 열 추출하기
iloc -> integer location 순서대로 읽기 
loc -> 인덱스 라벨값으로 읽기
 
21.인덱스의 범위로 불러오기

# 0부터 세므로 첫 번째 줄은 인덱스 0, 4째 줄은 인덱스 3이 됩니다.
df.iloc[1:4]    
# [a:b]의 경우 a 인덱스부터 b-1인덱스까지 불러오라는 의미입니다

22.첫 인덱스를 지정해 불러오기

df.iloc[2:]    # [a:]는 a인덱스부터 마지막 인덱스까지 불러오라는 의미입니다.

23.마지막 인덱스를 지정해 불러오기

df.iloc[:3]    # [:b]는 처음부터 b-1 인덱스까지 불러오라는 의미입니다.

24.모든 인덱스를 불러오기

df.iloc[:]    # [:]는 모든 인덱스를 불러오라는 의미입니다.

25.특정 열을 지정하여 가져오기

df[['a', 'b']]   # a열과 b열을 가져오라는 의미입니다.

26.조건을 만족하는 열 가져오기

df.filter(regex='c')    # 열 이름에 c라는 문자가 포함되어 있으면 출력하라는 의미입니다.

27.특정 문자가 포함되지 않는 열 가져오기

df.filter(regex='^(?!c$).*')    # 열 이름에 c라는 문자가 포함되어 있지 않으면 출력하라는 의미입니다.

E. 행과 열 추출하기
28.특정한 행과 열을 지정해 가져오기

#df.loc[가져올 행,가져올 열]의 형태로 불러옵니다.
df.loc[:, 'a':'c']     # 모든 인덱스에서, a열부터 c열까지를 가져오라는 의미입니다.

29. 인덱스로 특정 행과 열 가져오기

df.iloc[0:3, [0, 2]]   # 0 인덱스부터 2인덱스까지, 0번째 열과 2번째 열을 가져오라는 의미입니다. (첫 열이 0번째입니다.)

30. 특정 열에서 조건을 만족하는 행과 열 가져오기

df.loc[df['a'] > 5, ['a', 'c']]  # a열의 값이 5보다 큰 경우의 a열과 c열을 출력하라는 의미입니다.

31. 인덱스를 이용해 특정 조건을 만족하는 값 불러오기

df.iat[1, 2]    # 1번째 인덱스에서 2번째 열 값을 가져옵니다.

-> 13
F. 중복 데이터 다루기

# 실습을 위해 중복된 값이 포함된 데이터 프레임을 만들겠습니다.
df = pd.DataFrame(
    {"a" : [4 ,5, 6, 7, 7],
     "b" : [8, 9, 10, 11, 11],
     "c" : [12, 13, 14, 15, 15]},
    index = pd.MultiIndex.from_tuples(
        [('d', 1), ('d', 2), ('e', 1), ('e', 2), ('e',3)],
        names=['n', 'v']))
df

32. 특정 열에 어떤 값이 몇 개 들어 있는지 알아보기

df['a'].value_counts()

7    2
4    1
5    1
6    1
Name: a, dtype: int64
 
33. 데이터 프레임의 행이 몇 개인지 세어보기

len(df)

-> 5
34. 데이터 프레임의 행이 몇 개인지, 열이 몇 개인지 세어보기

df.shape

-> (5, 3)
 35. 특정 열에 유니크한 값이 몇 개인지 세어보기   # 특정 행 유니크한 값 X 

df['a'].nunique()

-> 4
36. 데이터 프레임의 형태를 한눈에 보기 / 데이터 요약

df.describe()

37. 중복된 값 제거하기

df = df.drop_duplicates()
df

-> 마지막 행의 중복값들이 사라짐 / 행값이 모두 동일해야 특정 행 지워짐 

 
다음 시간에는 데이터를 파악하는 판다스 문법에 대해 알아보겠습니다.
 
 
 

728x90