[파이썬] #11 - pandas 다루기
"""
Created on Mon Dec 9 20:13:36 2019
pandas 는 데이터 분석을 위해 사용하는 라이브러리 패키지
데이터의 간단한 통계 정보 및 시각화를 위한 다양한 기능제공
- 손쉬운 파일 입출력
- 다양한 파일 포맷 지원
#pip install pandas
#conda install pandas
"""
import pandas as pd
#pandas의 데이터 저장구조
# 1차원 : Series
# 2차원 : DataFrame
# 3차원 : Panel
series_data = list(range(1,10,2))
s = pd.Series(series_data)
print(f'type(s) -> {type(s)}')
print(s)
"""
Created on Mon Dec 9 20:38:09 2019
"""
#DataFrame 생성을 위한 딕셔너리 변수의 선언
#{키1 : 값1, .....}
import pandas as pd
data = {
'year' : [2017,2018,2019,2020],
'GDP Rate' : [1.8,3.1,3.0,None],
'GDP' : ['1.637M', '1.859M', '2.237M',None]
}
#딕셔러니 변수를 사용하여 DataFrame 객체 생성,
# 각키의 값들은 동일한 개수
# 해당위치에 데이터가 없는경우 결측데이터(NaN) 이 대입.
df = pd.DataFrame(data)
print(f'type(df) -> {type(df)}')
print(df)
# -*- coding: utf-8 -*-
#DataFrame 생성을 위한 딕셔너리 변수(json형태)의 선언
#{키1 : 값1, .....}
import pandas as pd
data = {
'year' : [2017,2018,2019],
'GDP Rate' : [1.8,3.1,3.0],
'GDP' : ['1.637M', '1.859M', '2.237M']
}
#딕셔러니 변수를 사용하여 DataFrame 객체 생성,
# 각키의 값들은 동일한 개수
# 해당위치에 데이터가 없는경우 결측데이터(NaN) 이 대입.
df = pd.DataFrame(data)
print(f'type(df) -> {type(df)}')
print(df)
#데이터 접근방법 key 이름
print(df.GDP)
print(df.year)
#key값에 공백이 있는경우
print(df['GDP Rate'])
#year 컬럼의 데이터중 2018년도 이후 데이터 추출
#boolean 값 반환
print(df.year >= 2018)
print("="*30)
#조건식의 결과를 사용하여 총 데이터 반환
print(df[df.year >= 2018])
print("="*30)
#특정조건에 맞는 일부분의 컬럼 데이터 조회
#데이터프레임변수[열이름][조건식]
print(df['GDP'][df.year >= 2018])
print("="*30)
#다수개의 열을 출력
print(df[['year', 'GDP Rate']][df.year>=2018])
print("="*30)
#pandas 에서 dtype : object 는 문자열의 의미
print(df.GDP)
# 문자열 타입이 제공하는 startswith 메소드
# 반대의 경우 endswith 메소드
# 매개변수로 시작되는 경우 TRUE
try :
print(df.GDP.startswith('1.'))
except :
print('typeError 발생')
print(df.GDP.str.startswith('1.'))
else :
pass
# 데이터프레임명.컬럼명 -> Series 타입반환
# 정수또는 실수형의 경우 문제발생 안하지만 문자열의경우
# Serise 타입이 해당 메소드를 제공하지 않기 때문에
# 에러발생
#Serise 타입은 인덱스 연사사용가능, 특정인덱스 값 반환
print(df.GDP[0] == '1')
print("="*30)
#Serise 타입이 제공하는 str 속성
#해당내부의 데이터를 문자열과 같은 배열로 반환
print(df.GDP.str.startswith('1.'))
print("="*30)
#가져올 key값[조건식]
# 문자열비교시 무조건 str 속성 써줘야 함
# int형을 string타입으로 바꾸는 경우 to_string()
print(df.year.to_string().endswith('9'))
print(df.year[df.GDP.str.startswith('1')])
"""
Created on Mon Dec 9 21:15:59 2019
"""
import pandas as pd
import pandas_data as pdData
pdData.data['year'].append(2020)
pdData.data['GDP'].append(None)
pdData.data['GDP Rate'].append(None)
df = pd.DataFrame(pdData.data)
print("="*30)
print(df)
#info 메소드
print("="*10+" df.info() "+"="*10)
print(df.info())
#데이터프레임에 저장된 수치데이터에 대한 간략한 통계
# describe 메소드
# 수치데이터에 대한 정보만 출력
print("="*10+" df.describe() "+"="*10)
print(df.describe())
print(df.year.sum())
print(df.year.mean())
print(df.year.max())
print(df.year.min())
#데이터중 제일 오래된 데이터를 가져오시오.
minYear = df.year.min()
print(df[df.year == minYear])
#특정열에 저장된 데이터의 중복을 제거한 데이터개수를반환
#각각데이터개수를 반환
print("="*10+" df.value_counts() "+"="*10)
print(df['GDP Rate'].value_counts())
print(df['GDP Rate'].value_counts()/len(df))
"""
Created on Mon Dec 9 21:37:47 2019
"""
import pandas as pd
import pandas_data as pdData
print(pdData.data)
df = pd.DataFrame(pdData.data)
print(df)
#데이터프레임의 앞, 뒷부분 데이터 추출
#- head, tail 메소드
#- 기본값 5개
print(df.head(2))
print(df.tail(1))
# -*- coding: utf-8 -*-
"""
Created on Mon Dec 9 21:46:35 2019
"""
import pandas as pd
#pandas를 사용하여 CSV 파일을 로딩한 후,
#dataFrame을 생성하는 방법
# - read_csv
fname = './data/iris.csv'
iris = pd.read_csv(fname)
print(iris)
print(iris.info())
print(iris.describe())
"""
Created on Mon Dec 9 21:59:12 2019
"""
import pandas as pd
fname = './data/winequality-red.csv'
wine = pd.read_csv(fname, sep=";")
#csv 구분문자는 콤마를 기준으로 데이터를 만들기때문에
#기준(콤마)이 다른경우 변경해줘야한다.
# sep='구분문자' ex) sep = ';'
print(wine.info())
print(wine.quality.value_counts())
quality_min = wine.quality.min()
low_quality = wine[wine.quality == quality_min]
print(low_quality.info()) #낮은 등급의 정보만 출력
# DataFrame 객체는 파일로 저장될 수 있습니다.
# 다양한 포맷지원
# 주의사항 : 인텍스정보 저장됨
low_quality.to_csv('./data/low_quality.csv')
#index 정보 제외하고 출력하는 예제
low_quality.to_csv('./data/low_quality.csv', index=False)
#구분자 변경
low_quality.to_csv('./data/low_quality.csv', index=False, sep=';')
#헤더제외
low_quality.to_csv('./data/low_quality.csv', index=False, header=False)
#encoding 변경
low_quality.to_csv('./data/low_quality.csv', index=False, encoding='utf-8')
댓글
댓글 쓰기