728x90
반응형
1. Series
2. DataFrame
3. 기술통계함수
4. 데이터 복사, 삭제, 조회, 저장하기
# -*- coding: utf-8 -*-
"""
Created on Mon Jun 20 09:38:40 2022
@author: p011v
"""
#mariadb의 전신 mysql
import pymysql #pip install pymysql
con = pymysql.connect(host="localhost", port=3306,
user="kic", passwd="1234",
db="kicdb", charset="utf8")
try :
cur = con.cursor() #문장실행 객체
cur.execute("select * from item")
for row in cur.fetchall() :
print(type(row), row) #튜플, 내용출력
finally :
cur.close()
con.close()
#item 테이블중 가격이 100이상 300이하인 레코드 출력하기
con = pymysql.connect(host="localhost", port=3306,
user="kic", passwd="1234",
db="kicdb", charset="utf8")
try :
cur = con.cursor() #문장실행 객체
# cur.execute("select * from item where price between 100 and 300")
# 파라미터형태로 구현
# cur.execute("select * from item where price between ? and ?",[100,300]) #오류발생. sqlite와 다름
# cur.execute("select * from item where price between %s and %s",(100,300)) #오류발생. sqlite와 다름
cur.execute("select * from item where price between 100 and 300")
for row in cur.fetchall() :
print(row) #튜플, 내용출력
finally :
cur.close()
con.close()
######################################################################
# pandas : 표 형태의 데이터 저장하는 모듈
# Series : 1차원 형태의 데이터
# DataFrame : 2차원 형태(행,열)의 데이터. Series 데이터의 모임.
######################################################################
########## 1. Series
import pandas as pd #pip install pandas. pd로 alias 지정
#딕셔너리 데이터를 Series 객체로 생성. 키값이 index로 저장.
dict_data = {'a':1, 'b':2, 'c':3}
sr = pd.Series(dict_data) #딕셔너리 데이터를 시리즈객체로 생성
print(sr)
# print(type(sr))
print(sr.index) #a, b, c
print(sr.values) #1, 2, 3
#리스트 데이터를 Series 객체로 생성. 키가 없기때문에 index값으로 저장.
list_data = ['2022-06-20', 3.14, 'ABC', 100, True]
sr = pd.Series(list_data)
print(sr)
print(type(sr))
print(sr.index) #RangeIndex(start=0, stop=5, step=1)
print(sr.values) #'2022-06-20', 3.14, 'ABC', 100, True
#튜플 데이터를 Series 객체로 생성. 리스트와 동일.
tuple_data = ('홍길동', '1991-01-25', '남', True)
sr = pd.Series(tuple_data, index=['이름','생년월일','성별','학생여부']) #인덱스값 지정
print(sr)
print(type(sr))
print(sr.index) #'이름', '생년월일', '성별', '학생여부'], dtype='object'
print(sr.values) #'홍길동' '1991-01-25' '남' True
#한개의 값만 조회
print(sr[0]) #순서로 조회
print(sr['이름']) #인덱스값으로 조회
#생년월일 출력하기
print(sr[1]) #순서로 조회
print(sr['생년월일']) #인덱스값으로 조회
#여러개의 값을 조회. 인덱스값으로 조회
print(sr[[1,2]]) #1, 2번 인덱스 조회
print(sr[1,2]) #오류발생
print(sr[['생년월일','성별']]) #인덱스값으로 조회
print(sr['생년월일','성별']) #오류발생
print(sr[['생년월일','성별']].values) #인덱스값으로 조회하고 values값만 출력
print(sr[[1,3]]) #순서로 조회. 1, 3 까지
print(sr[['생년월일','학생여부']]) #인덱스값으로 조회
#여러개의 값을 조회 : 범위지정
print(sr[0:2]) # 0 ~ 1번 인덱스까지 조회
print(sr['이름':'성별']) #이름부터 생년월일까지 조회
########## 2. DataFrame
#딕셔너리를 이용하여 데이터프레임 객체 생성. 키값이 column으로, index값은 0부터 자동으로 저장.
#column(열), index(행)
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(dict_data)
print(df)
print("컬럼명: ",df.columns)
print("인덱스: ",df.index)
#리스트를 이용하여 데이터프레임 객체 생성.
df = pd.DataFrame([[15,'남','서울중'],[17,'여','서울여고'],
[17,'남','서울고']],
index=['홍길동','성춘향','이몽룡'],
columns=['나이','성별','학교'])
print(df)
#인덱스명 변경하기
df.index=['학생1','학생2','학생3']
print(df)
#컬럼명 변경하기
df.columns=['age','gender','school']
print(df)
#rename columns명의 일부만 변경하기
#inplace=True : 객체자체를 변경
df.rename(columns={'age':'나이'}, inplace=True)
print("컬럼명: ", df.columns)
print(df)
#df.rename(columns={'gender':'성별'}) : inplace=True 사용하지 않으면 임시저장하여 결과값 저장안됨.
df=df.rename(columns={'gender':'성별'}) #inplace=True 사용하지 않으면, df= 대입구문이 대체 효과
print("컬럼명: ", df.columns)
print(df)
#rename index의 일부만 변경하기
df.rename(index={'학생1':'홍길동'}, inplace=True)
print(df)
# 문제 : exam_data를 이용하여, 인덱스가 홍길동, 이몽룡, 김삿갓인 DataFrame객체 생성하기
exam_data={'수학':[90,80,70], '영어':[98,88,95], '음악':[85,95,100], '체육':[100,90,90]}
df=pd.DataFrame(exam_data) #dictionary pandas DataFrame객체 생성
print(df) #index명은 0부터 자동으로 저장.
df.index=['홍길동','이몽룡','김삿갓'] #index명 변경
print(df)
########## 3. 기술통계함수
#평균. mean()
df.mean()
print(df.mean())
print(type(df.mean()))
#수학 평균
type(df['수학'])
print(df['수학'].mean()) #수학의 값만 가져오고 평균출력
print(df.mean()["수학"]) #전체평균을 구하고 수학의 값만 출력
#홍길동 학생의 평균 구하기. index값 계산하기
#df.loc["홍길동"] : 인덱스가 홍길동인 데이터
df.loc["홍길동"]
print(df.loc['홍길동'].mean())
#합계. sum()
print(df.sum())
#수학점수 총점 출력하기
print(df['수학'].sum()) #수학의 값만 가져오고 합계출력
print(df.sum()["수학"]) #전체합계을 구하고 수학의 값만 출력
#최대값. max()
print(df.max())
print(df['수학'].max())
print(df.max()["수학"])
#최소값. min()
print(df.min())
print(df['수학'].min())
print(df.min()["수학"])
#중간값. median() : 정렬하여 데이터의 가운데 값.
print(df.median())
#기술통계 정보 : count, mean, std, min, 25%, 50%, 75%, max
#표준편차. std() : sqrt(평균 - 값)**2 합계. sqrt:root
print(df.std())
#분산. var() : (평균 - 값)**2 합계.
print(df.var())
#기술통계정보 전체조회
print(df.describe())
print(df['수학'].describe())
print(df.describe()["수학"])
#DataFrame data의 간략정보
print(df.info())
print(df['수학'].info())
# 문제 : 김삿갓의 총점, 평균, 중간값, 표준편차 조회하기
print(df.loc['김삿갓'])
print("총점: ", df.loc['김삿갓'].sum())
print("평균: ", df.loc['김삿갓'].mean())
print("중간값: ", df.loc['김삿갓'].median()) #짝수인 경우 가운데 값 2개의 평균
print("표준편차: ", df.loc['김삿갓'].std())
print("총점: ", df.loc['김삿갓'].sum(), "평균: ", df.loc['김삿갓'].mean(), "중간값: ", df.loc['김삿갓'].median(), "표준편차: ", df.loc['김삿갓'].std())
#김삿갓 데이터의 기술통계 정보 조회하기
df.loc['김삿갓'].describe()
########## 4. 데이터 복사, 삭제하기
#얕은복사. 두개의 데이터는 동일한 객체임.
df2 = df
df2
df
#df의 홍길동 인덱스를 홍킬동으로 변경하기
df.rename(index={"홍길동":"홍킬동"}, inplace=True)
df
df2
#깊은복사. 두개의 데이터가 다른 객체임. [:]
df3 = df[:] #[:] : 범위영역지정. 전체범위
df
df3
#df의 홍길동 인덱스를 홍킬동으로 변경하기
df.rename(index={"홍킬동":"학생1"}, inplace=True)
df
df3
#drop() : 행(columns), 열(index) 제거하기
# axis=0 : 행을 의미.
# axis=1 : 열을 의미.
#행을 제거하기
df3.drop(["홍킬동", "김삿갓"], axis=0, inplace=True) #홍길동, 김삿갓 lndex을 제거
df3
#열을 제거하기
df3.drop(["체육"], axis=1, inplace=True) #체육 columns 제거
del df3["음악"] #음악 컬럼을 제거
df3
#copy() : 깊은복사 방식
df4= df.copy()
df4
#df4에서 음악 체육 컬럼 제거하기
del df4["음악"] #음악 컬럼을 제거
del df4["체육"] #체육 컬럼을 제거
df4 = df.copy()
df4.drop(["음악", "체육"], axis=1, inplace=True) #음악, 체육 columns 제거
df4
df
#df 데이터의 수학 컬럼 조회하기
df["수학"]
df.수학
#df데이터의 수학, 영어 컬럼 조회하기
df[["수학","영어"]]
df["수학","영어"] #오류발생
df
#이몽룡 학생의 점수 조회하기. 인덱스값을 조회하기
#loc["인덱스명"] : index의 이름으로 조회
#iloc[인덱스번호] : index의 순서로 조회
df.loc["이몽룡"]
df.iloc[1] #2번째 행
#이몽룡, 김삿갓 학생의 점수 조회하기
df.loc[["이몽룡","김삿갓"]]
df.iloc[[1,2]] #2번째, 3번째 행
df.loc["학생1":"김삿갓"] #범위
df.iloc[1:2] #범위. 2번째부터 3번째 앞까지. 2번째 조회회
df.iloc[1:3] #범위. 2번째부터 4번째 앞까지. 2번째, 3번째 조회회
df.iloc[1:] #범위. 2번째부터 끝까지. 2번째, 3번째 조회회
#jeju.csv 파일을 판다스모듈을 이용하여 읽기
df = pd.read_csv("data/jeju1.csv")
df
#df데이터의 간략정보 조회하기
df.info()
df
df.head() #처음 5개행만 조회
print(df.tail()) #마지막 5개행만 조회
type(df)
#장소만 조회하기
df.장소
df["장소"]
df[["장소"]]
type(df.장소) #pandas.core.series.Series 객체
type(df["장소"]) #pandas.core.series.Series 객체
type(df[["장소"]]) #pandas.core.frame.DataFrame 객체
#LON(경도), LAT(위도) 데이터 출력하기
df[["LON","LAT"]]
#장소 컬럼을 인덱스로 변경하기
df.set_index("장소", inplace=True)
df
#돔베돔의 경도, 위도값 조회하기
df.loc["돔베돈"]
df.info()
#인덱스값을 '여행지'컬럼으로 생성하기
df["여행지"]=df.index
df.info()
df
#인덱스를 컬럼으로 변경하기
df.reset_index(inplace=True)
df
#장소 컬럼 제거하기
df.drop(["장소"], axis=1, inplace=True)
del df["장소"]
df
#df데이터의 내용을 csv 파일로 저장하기
#index=True : index도 데이터로 저장함. 기본값.
#index=False : index는 저장안함.
df.to_csv("data/df_jeju.csv", index=False)
df.to_csv("data/df_jeju.csv")
# read_excel : 판다스를 이용하여 excel 파일 읽기
# read_excel(파일명,sheet이름,인덱스컬럼)
# sheet_name=None : 모든 sheet 읽기
# index_col=None : index로 사용할 컬럼명이 없다. 인덱스 컬럼 지정하지 않음
df = pd.read_excel("data/sales_2015.xlsx", sheet_name=None, index_col=None)
df #{sheet이름:DataFrame객체,..}
type(df) #dict 자료형
for name, data in df.items():
print("sheet 이름: ", name) #DataFrame 객체
print(type(data))
print(data)
#Sale Amount 컬럼의 값이 500보다 큰 레코드만 조회
#data[조건값] : 조건값이 True인 레코드만 조회
print(data[data["Sale Amount"] > 500.0])
data["Sale Amount"] > 500.0
#하나의 sheet만 읽기. january_2015 한개만 읽기
df = pd.read_excel("data/sales_2015.xlsx", "january_2015", index_col=None)
df
type(df) #pandas.core.frame.DataFrame
#Sale Amount 컬럼 값이 500보다 큰 레코드만 df500에 저장하기
df500 = df[df["Sale Amount"] > 500.0]
df500
#df500데이터를 pd_sale_2015.xlsx파일의 jan_2015_500 sheet로 저장하기
outexcel = pd.ExcelWriter("data/pd_sale_2015.xlsx") #내용없는 엑셀파일 생성
#to_excel(엑셀파일, sheet명, 인덱스여부)
df500.to_excel(outexcel, sheet_name="jan_2015_500", index=False) #엑셀에 data 추가
outexcel.save() #저장하기. 엑셀파일로 생성
728x90
반응형
'study > Python' 카테고리의 다른 글
[Python] 35. Test 답 (0) | 2022.06.20 |
---|---|
[Python] 35. Test (0) | 2022.06.20 |
[Python] 34. Test 답 (0) | 2022.06.17 |
[Python] 34. Test (0) | 2022.06.17 |
[Python] 34. 클래스에서 사용되는 특별한 함수들, 모듈, 정규식, 파일 읽고 쓰기 (0) | 2022.06.17 |