차곡차곡

Pandas 본문

2021 데이터 청년 캠퍼스/기초 파이썬

Pandas

sohy 2021. 7. 5. 16:56

Pandas

자료들 간 빠른 연산 속도 및 데이터 분석을 가능

DB 테이블, 또는 엑셀 파일과 같은 테이블 형태의 데이터를 다룬다.

 

- Series : 1차원 데이터 + index

1. List로부터 생성 + index는 자동 생성

import pandas as pd

rawData = [3, 5, 10, 2]
data = pd.Series(rawData)
print(data)
print(data.get(2))
print(data[2])

>> 0     3
     1     5
     2    10
     3     2
     dtype: int64
     10
     10

2. List로부터 생성 + index 직접 부여

rawData = [3, 5, 10, 2]
data = pd.Series(rawData, index=["a", "b", "c", "d"])
print(data)

>> a     3
      b     5
      c    10
      d     2
      dtype: int64

3. Dictionary로부터 생성 (key는 index, value는 데이터로 들어감)

rawData = {"치킨스테이크":3, "비프스테이크":5, "삼겹살스테이크":10, "함박스테이크":2}
data = pd.Series(rawData)
print(data)
print(data.get(2))
print(data[2])
print(data.get("함박스테이크"))
print(data["비프스테이크"])

>> 치킨스테이크      3
      비프스테이크      5
      삼겹살스테이크    10
      함박스테이크      2
      dtype: int64
      10
      10
      2
      5

 

- Dataframe : Series들이 모인 2차원 데이터

 

1. List로부터 생성

aL = [1, 2, 3, 4]
bL = [5, 6, 7, 8]
cL = [4, 3, 2, 1]
scoreType = ["과제1", "과제2", "과제3", "기말"]
students = ["양용", "용석", "석양"]
abc = pd.DataFrame((aL, bL, cL), columns=scoreType, index=students)
print(abc)

>>     과제1  과제2  과제3  기말
     양용    1    2    3   4
     용석    5    6    7   8
     석양    4    3    2   1

2. 여러 개의 Series로부터 생성

aS = pd.Series(aL, index=scoreType)
bS = pd.Series(bL, index=scoreType)
cS = pd.Series(cL, index=scoreType)
abc = pd.DataFrame((aS, bS, cS), index=students)
print(abc)

>>     과제1  과제2  과제3  기말
     양용    1    2    3   4
     용석    5    6    7   8
     석양    4    3    2   1

3. Dictionary들의 list로부터 생성

rawData = {"3일" : [3, 5, 10, 2], "4일" : [10, 9, 0, 1], "5일" : [5, 7, 6, 3]}
data = pd.DataFrame(rawData)
print(data)

# index 부여
data.index = ["치킨", "비프", "삼겹살", "합박"]
print(data)

>>      3일  4일  5일
  치킨    3  10   5
  비프    5   9   7
  삼겹살  10   0   6
  합박    2   1   3

 

- DataFrame 접근

 

1. 열 선택

print(data["3일"])
print(data.get("3일"))
print(abc.과제2)

# data.3일 은 안 됨 : 파이썬에서 변수명은 숫자로 시작할 수 없음

>> 치킨      3
     비프      5
     삼겹살    10
     합박      2
     Name: 3일, dtype: int64
    
     치킨      3
     비프      5
     삼겹살    10
     합박      2
     Name: 3일, dtype: int64

     양용    2
     용석    6
     석양    3
     Name: 과제2, dtype: int64

2. 행 선택

print(data[0:2])
print(data[0::2])
print(data["치킨":"삼겹살":2])	#끝 인덱스 포함

>>     3일  4일  5일
    치킨   3  10   5
    비프   5   9   7
    
       3일  4일  5일
    치킨    3  10   5
    삼겹살  10   0   6
    
      3일  4일  5일
    치킨    3  10   5
    삼겹살  10   0   6

3. 행/열 선택

# iloc : 숫자로 선택하기
print(data.iloc[::2, 1])
print(data.iloc[3, 2])

# loc : column명 & index로 선택하기 (끝 인덱스 포함)
print(data.loc[:"삼겹살", "4일"])

>> 치킨     10
     삼겹살     0
     Name: 4일, dtype: int64

     3

     치킨     10
     비프      9
     삼겹살     0
     Name: 4일, dtype: int64

 

- DataFrame 활용

 

1. 데이터 필터링

print(data[data["5일"] > 4])

>>      3일  4일  5일
   치킨    3  10   5
   비프    5   9   7
   삼겹살  10   0   6

2. 데이터 정렬

print(data.sort_values("5일"))
print(data.sort_values("5일", ascending=False))

>>      3일  4일  5일
   합박    2   1   3
   치킨    3  10   5
   삼겹살  10   0   6
   비프    5   9   7
     
       3일  4일  5일
   비프    5   9   7
   삼겹살  10   0   6
   치킨    3  10   5
   합박    2   1   3

 

3. 데이터 기초통계랑

print(data.describe()) 

>>            3일         4일        5일
count   4.000000   4.000000  4.000000
mean    5.000000   5.000000  5.250000
std     3.559026   5.228129  1.707825
min     2.000000   0.000000  3.000000
25%     2.750000   0.750000  4.500000
50%     4.000000   5.000000  5.500000
75%     6.250000   9.250000  6.250000
max    10.000000  10.000000  7.000000

 

* 엑셀에 쓰기

data.to_excel("dosirak.xlsx")	# data를 dosirak 파일에

* 엑셀에서 읽기

ex = pd.read_excel("20200520.xlsx", sheet_name="교과목명-담당교수명") # pandas로 엑셀 읽기
Comments