개발자 미니민의 개발스터디

[파이썬] 판다스 pandas

by mini_min
[파이썬] 판다스 pandas

🖋️ 판다스? 

파이썬 외부 라이브러리 중 대표적인 패키지이다. 

데이터를 쉽게 다룰 수 있는 테이블 형식으로 만들어 준다. 거의 모든 데이터 사이언스 패키지들은 판다스와 연동된다. 

# pandas 설치 
# cmd> pip install pandas

 

- series : 1차원 구조(배열 구조)

- DataFrame : 2차원 구조 (행, 열)

- Panel : 3차원 구조

import pandas as pd

#판다스 버전
print(pd.__version__) # 1.5.2

#series : 인덱스를 가지고 있는 1차원 배열과 유사한 자료 구조
sr = pd.Series([1,9,-3,4])
print(sr) # 마지막은 데이터 타입 dtype: int64 정수형이란 뜻 
print()

# 값 확인
print(sr.values) # [ 1  9 -3  4] : list랑 다르게 나옴

# 인덱스(0부터 시작)로 값 가져오기
print(sr[2]) # -3 

# 인덱스 확인
print(sr.index) # RangeIndex(start=0, stop=4, step=1)

# 자료형 확인
print(sr.dtype)
print()

# 기본 인덱스는 정수이지만 다른 타입으로 설정 가능
sr = pd.Series([100,90,80,95], index=["java", "spring", "css", "oracle"])
print(sr)
print()
print(sr["java"]) # 100
print(sr[0]) # 100
print()

print("값:", sr.values)
print("인덱스:", sr.index) 
# 인덱스: Index(['java', 'spring', 'css', 'oracle'], dtype='object')
print()

# Series 는 파이썬의 dict 와 호환된다.
dic = {
    "A":3000, "B":6000, "C":000, "D":4000
}

sr = pd.Series(dic)
print(sr)
print()

print(sr.values)
print(sr["C"])
print(sr[2])
print()

# 타입이 달라도 가능
sr = pd.Series([1,"B",3,"D"])
print(sr) # dtype: object
print()

 

: DataFrame 은 2차원 구조이다. 

값, 인덱스, 컬럼 설정을 할 수 있다.

import pandas as pd

# DataFrame : 2차원 구조(행, 열)

values = [[1,2,3], [4,5,6], [7,8,9]]
i = ['one', 'two', 'three']
c = ["A", "B", "C"]

df = pd.DataFrame(values, index=i, columns=c)
print(df)
print("-------------------")

print("인덱스:", df.index)
print("열이름:", df.columns)
print("데이터값")
print(df.values)
print("-------------------")

df = pd.DataFrame(data=[[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]], 
                  columns=["A","B","C","D"],
                  index=range(1,5))
print(df)
print("-------------------")

 

: 리스트로 데이터프레임 생성하기

import pandas as pd

# 리스트로 DataFrame 생성

data = [
    ['1001', '김자바', 93.72],
    ['1002', '이자바', 75.88],
    ['1003', '하자바', 90.33],
    ['1004', '유자바', 62.30],
    ['1005', '구자바', 80.33],
    ['1006', '홍자바', 99.15],
    
]

df = pd.DataFrame(data)
print(df) # 열 명은 0 1 2, 행명은 0 1 2 3 4 5
print("-----------------")

# 인덱스를 1~6으로 변경
df.index = df.index +1
print(df)
print("-----------------")

# 열 이름 지정
df = pd.DataFrame(data, columns=["학번", "이름", "점수"])
print(df)
print("-----------------")

# 인덱스명 지정
idx = ['1번', '2번', '3번', '4번', '5번', '6번']
df = pd.DataFrame(data, index=idx)
print(df)
print("-----------------")

#dict 를 데이터 프레임으로
data = {
    '학번':['1000', '1001', '1002', '1003', '1004', '1005'],
    '이름':['김자바', '이자바', '다자바', '너자바', '신자바', '홍자바'],
    '점수':[90.30, 75.33, 99.22, 65.20, 80.45, 77.12]
}

df = pd.DataFrame(data)
print(df)

 

: dict 를 데이터 프레임으로 만들기

import pandas as pd

#dict 를 데이터 프레임으로
data = {
    '학번':['1000', '1001', '1002', '1003', '1004', '1005'],
    '이름':['김자바', '이자바', '다자바', '너자바', '신자바', '홍자바'],
    '점수':[90.30, 75.33, 99.22, 65.20, 80.45, 77.12]
}

df = pd.DataFrame(data)
print(df)
print("----------------")

#새로운 열 추가
df['age'] = [20,12,33,20,21,22]
print(df)
print("----------------")

df['pass'] = df['점수'] >= 80
print(df)
print("----------------")

#열 삭제
del df['pass']
print(df)
print("----------------")

 

: iloc , loc 로 데이터 프레임에 접근할 수 있다.

import pandas as pd

#dict 를 데이터 프레임으로
data = {
    '학번':['1000', '1001', '1002', '1003', '1004', '1005'],
    '이름':['김자바', '이자바', '다자바', '너자바', '신자바', '홍자바'],
    '점수':[90.30, 75.33, 99.22, 65.20, 80.45, 77.12]
}

df = pd.DataFrame(data)
print(df)
print("----------------")

# 레이블명이 0인 행 접근
# loc : 행이나 컬럼에 label 이나 boolean array로 접근
print(df.loc[0])
print()

print(df.loc[1])
print()
print("-------------")

# iloc : 행이나 컬럼에 인덱스로 접근
print(df.iloc[0]) # 첫행
print()

print(df.iloc[2]) # 인덱스가 2인 행 = 세번째 행
print()

print(df.iloc[-1]) # 마지막행
print()
print("-------------")

# 0,1,2행
print(df.loc[0:2]) # 레이블명으로 접근
print()
print(df.iloc[0:3]) # 인덱스로 접근
print()
import pandas as pd

#dict 를 데이터 프레임으로
data = {
    '학번':['1000', '1001', '1002', '1003', '1004', '1005'],
    '이름':['김자바', '이자바', '다자바', '너자바', '신자바', '홍자바'],
    '점수':[90.30, 75.33, 99.22, 65.20, 80.45, 77.12]
}

df = pd.DataFrame(data)
print(df)
print("----------------")

# '학번' 열
print(df['학번'])
print()

# '이름', '점수' 열
print(df[['이름', '점수']])
print()

# loc 로 접근 : 라벨로 접근
print(df.loc[:, '점수'])
print()

# iloc 로 접근 : 인덱스로 접근
print(df.iloc[:, 1])
print()

print(df.iloc[:,2]) # 세번째 열
print()

print(df.iloc[:,-1]) # 마지막 열
print()

 

: head(n), tail(n) 으로 데이터 프레임 접근하기

import pandas as pd

#dict 를 데이터 프레임으로
data = {
    '학번':['1000', '1001', '1002', '1003', '1004', '1005'],
    '이름':['김자바', '이자바', '다자바', '너자바', '신자바', '홍자바'],
    '점수':[90.30, 75.33, 99.22, 65.20, 80.45, 77.12]
}

df = pd.DataFrame(data)
print(df)
print("----------------")

# head(n) : 앞부분 n개 보기
# tail(n) : 뒷부분 n개 보기

print(df.head(3))
print("----------------")

print(df.tail(3))
print("----------------")

 

: 데이터 프레임을 list 로 변환한다.

import pandas as pd

#dict 를 데이터 프레임으로
data = {
    '학번':['1000', '1001', '1002', '1003', '1004', '1005'],
    '이름':['김자바', '이자바', '다자바', '너자바', '신자바', '홍자바'],
    '점수':[90.30, 75.33, 99.22, 65.20, 80.45, 77.12]
}

df = pd.DataFrame(data)
print(df)
print("----------------")

# 데이터 프레임을 list 로 변환
a = df.values.tolist()
print(a)
print(f"{'-'*80}\n")

# 인덱스가 2인 열을 리스트로 변환
a = df.iloc[:, 2].tolist()
print(a)
print(f"{'-'*80}\n")

for idx, row in df.iterrows():
    print("인덱스:", idx)
    print(row)
    print("-"*30)
print()

 

: 데이터 프레임의 합 평균, 최대, 최소, 개수, 정렬 등

import pandas as pd

data = {
    'eng':[10,30,50,70],
    'kor':[20,40,60,80],
    'mat':[90,50,20,70]
}

df = pd.DataFrame(data, index=['A-01', 'A-02', 'A-03', 'A-04'])
print(df)
print(f"{'-'*80}\n")

# 각열의 합 , axis=0 : 열
print(df.sum(axis=0))
print()

# 각행의 합 , axis=1 : 행
print(df.sum(axis=1))
print()

# 각열의 평균 , axis=0 : 열
print(df.mean(axis=0))
print()

# 각행의 평균 , axis=1 : 행
print(df.mean(axis=1))
print()


# 각열의 최대 , axis=0 : 열
print(df.max(axis=0))
print()

# 각행의 최대 , axis=1 : 행
print(df.max(axis=1))
print()


# 각열의 중앙값 , axis=0 : 열
print(df.median(axis=0))
print()

# 각행의 중앙값 , axis=1 : 행
print(df.median(axis=1))
print()



# 각열의 개수 , axis=0 : 열
print(df.count(axis=0))
print()

# 각행의 개수 , axis=1 : 행
print(df.count(axis=1))
print()

# mat 를 기준으로 오름차순 정렬
print(df.sort_values(by="mat"))
print()

# mat 를 기준으로 내림차순 정렬
print(df.sort_values(by="mat", ascending=False))
print()

print(df.sort_values(by="mat", ascending=False).head(3))
print()
print(df.sort_values(by="mat", ascending=False).tail(3))
print()

 

: csv 파일을 읽어서 판다스 데이터 프레임 객체로 만들기.

import pandas as pd

# csv 파일을 읽어서 판다스 데이터 프레임 객체로 만들기

pathname = "C:/source/data/score.csv"
df = pd.read_csv(pathname)

print(df)
print()

print(df.index) #RangeIndex(start=0, stop=3, step=1)
print()

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기