수업(국비지원)/Python
[Python] Pandas
byeolsub
2023. 4. 25. 11:19
'''
2022-11-30 복습
파일
하위 폴더 : os.listdir()
폴더 생성 : os.mkdir()
폴더 삭제 : os.rmdir()
엑셀파일 읽기 : 엑셀파일의 종류에 따라 다른 모듈이 필요 => pandas로 접근
xlsx : openpyxl 모듈 사용
xls : xlrd 모듈로 읽기
xlwd 모듈로 쓰기
db 연결
sqlite : sqlite3 모듈 이용
oracle : cx_Oracle 모듈 이용
=> 외부 모듈 pip install cx_Oracle 실행 후 사용 가능
'''
📌
'''
pandas : 표 형태의 데이터 저장하는 모듈.
Series : 1차원 형태의 데이터.
DataFrame : 2차원 형태(행,열)의 데이터.
Series 데이터의 모임.
'''
##### 1. Series 자료형 (한개의 열 = 한개의 Series)
import pandas as pd
# 딕셔너리 데이터를 Series 데이터로 생성. 키값이 index(첨자)로 저장.
dict_data = {'a':1,'b':2,'c':3}
sr = pd.Series(dict_data) # Series 객체 생성
print(sr)
print(sr.index) # 결과 -> Index(['a', 'b', 'c'], dtype='object')
print(sr.values) # 결과 -> [1 2 3]
# 튜플데이터를 Series 데이터로 생성. 키가 없기때문에 index값으로 저장.
tuple_data = ("홍길동",'1991-01-25','남',True)
sr = pd.Series(tuple_data,index=["이름","생년월일","성별","학생여부"])
print(sr)
print(sr.index) # 값의 이름
print(sr.values)
# 한개의 값만 조회
print(sr[0]) # 순서로 조회.
print(sr["이름"]) # 인덱스로 조회(값에 의미를 부여해주는 의미값)
print(sr.이름) # 인덱스로 조회
print(sr[1]) # 순서로 조회.
print(sr["생년월일"]) # 인덱스로 조회
print(sr.생년월일) # 인덱스로 조회
# 여러개의 값 조회
# [[]] 로 사용하여야 함.
print(sr[[0,1]]) # 순서로 조회
print(sr[['이름','생년월일']]) # 인덱스로 조회
# print(sr['이름','생년월일']) # 오류 발생
# 여러개의 값 조회. 범위 지정하여 조회.
# [] 한개면 됨.
print(sr[0:2]) # 순서로 조회. 마지막 값의 앞 까지
print(sr['이름':'생년월일']) # 인덱스 조회. 마지막 값 까지


📌
##### 2. DataFrame 객체 생성하기
# 딕셔너리 객체를 이용하여 생성하기. 키값 = column, index값은 0부터 자동 저장
dict_data = {'c0':[1,2,3],'c1':[4,5,6],'c2':[7,8,9],
'c3':[10,11,12],'c4':[13,14,15]}
df = pd.DataFrame(dict_data)
print(df)
print("컬럼명:",df.columns) # columns : 열의 이름
print("인덱스명:",df.index) # index : 행의 이름
# 한개의 정보만 조회
df["c0"]
type(df["c0"]) # 시리즈 객체. pandas.core.series.Series
# 여러개의 데이터 조회
df[["c0","c1"]]
type(df[["c0","c1"]]) # 데이터 프레임. pandas.core.frame.DataFrame

# 리스트를 이용하여 데이터 프레임 객체 생성
# 데이터 프레임 자체가 2차원 배열이기 때문에 리스트의 리스트로 만들어진다.
df = pd.DataFrame([[15,'남','서울중'],[17,'여','서울여고'],
[17,'남','서울고']],
index = ['홍길동','성춘향','이몽룡'], # 행의 이름
columns = ['나이','성별','학교']) # 열의 이름
print(df)
print(df.index)
print(df.columns)
# 인덱스 이름 변경
df.index = ["학생1","학생2","학생3"]
print(df)
# 컬럼명 변경하기
df.columns = ["age","gender","school"]
print(df)
# rename : 컬럼명의 일부만 변경
#inplace=True : 객체 자체 변경
df.rename(columns ={'age':"나이"},inplace=True)
print(df)
#inplace=True 사용하지않으면, df= 대입구문이 대체효과.
df = df.rename(index ={'학생1':"홍길동"})#inplace=True효과 위해 df = 붙여 다시 저장
print(df)


❓
'''
문제
exam_data이용하여 인덱스는 홍길동,이몽룡,김삿갓 인 DataFrame객체 생성하기
'''
exam_data = {'수학':[90,80,70], '영어':[98,88,95],
'음악':[85,95,100],'체육':[100,90,90]}
#1데이타프레임 만들기
df= pd.DataFrame(exam_data,index= ["홍길동","이몽룡","김삿갓"])
print(df)
#1-2
df= pd.DataFrame(exam_data)
df.index = ["홍길동","이몽룡","김삿갓"]
print(df)
#mean() : 과목별 평균
print(df.mean())
print(type(df.mean()))
#수학평균
print("수학평균 : ",df.mean()['수학'])
print("수학평균 : ",df['수학'].mean())
print(df["수학"]) #Series 객체
#과목별 합계
print(df.sum())
print(type(df.sum()))
#수학총점
print(df.sum()["수학"])
print(df["수학"].sum())
#과목별 최대점수
print(df.max())
print(type(df.max()))
#수학 최대점수
print(df.max()["수학"])
print(df["수학"].max())
'''
#median() : 중간값
중간값? 데이터를 정렬하여 가운데 인덱스의 값
ex) 수학 90,80,70 영어 98,95,88
데이터의 갯수 홀수 : 가운데 값.
데이터의 갯수 짝수 : 가운데 두값의 평균.
'''
#과목별 중간값
print(df.median())
print(type(df.median()))
#수학의 중간값
print(df.median()["수학"])
print(df["수학"].median())

