[Pandas] Pandas
Pandas#
Pandas는 고유하게 정의된 2개의 자료구조를 가지고 있다.
- Series : 1차원, 같은 데이터 타입을 사용
- DataFrame : 2차원, 여러개의 Series를 합쳐서 Table 구조로 만든 자료구조
Series#
import numpy as np
import pandas as pd
# Series를 만들어보자
s = pd.Series([-1, 8, 10, 99], dtype=np.int32, index=['b', 'k', 'b', 'c'])
print(s) # pandas는 index를 지정할 수 있다
print(s.values) # Series가 가지고 있는 값에 대한 ndarray만 추출 # [-1. 5. 10. 99.]
print(s.index) # RangeIndex(start=0, stop=4, step=1)
print(type(s.index)) # <class 'pandas.core.indexes.range.RangeIndex'>
print(s.dtype) # float64
print('s[3]의 값은 : {}'.format(s[3]))
print('s["k"]의 값은 : {}'.format(s['k'])) # 기본 index를 대체하는 것이 아닌 같이 사용할 수 있다
print('s["b"]의 값은 : \n{}'.format(s['b'])) # 중복된 문자 index는 가지고 있는 모든 결과를 Series형태로 출력한다
Series에서의 Slicing, Boolean indexing, fancy indexing#
import numpy as np
import pandas as pd
# Series를 Slicing
s = pd.Series([-1, 8, 10, 99], dtype=np.int32, index=['b', 'k', 't', 'c'])
print(s[0:2]) # numpy의 ndarray의 slicing과 같아요
print(s['b':'t']) # 마지막 index가 포함됨
# Series에 대한 Boolean indexing과 fancy indexing
import numpy as np
import pandas as pd
s = pd.Series([-1, 8, 10, 99], dtype=np.int32, index=['b', 'k', 't', 'c'])
print(s[['b', 't']])
print(s[s > 8])
print(s.sum())
Series를 만드는 또 다른 방법 (dict)이용#
# Series를 만드는 또 다른 방법
# python의 dictionary를 이용해서 만들어요(dict)
import numpy as np
import pandas as pd
my_dict = {'서울': 1000, '부산': 2000, '제주': 3000}
s = pd.Series(my_dict)
s.name = '지역별 가격'
s.index.name = 'region'
s.index = ['Seoul', 'Busan', 'Jeju']
print(s)
DataFrame#
import numpy as np
import pandas as pd
data = {'이름':['아이유', '김연아', '홍길동', '장범준'], '학과':['국어국문', '수학', '컴퓨터', '철학'], '나이':[25, 29, 23, np.nan]} # 값을 모를 경우? np.nan을 사용하여 NaN값을 넣을 수 있다
df = pd.DataFrame(data)
display(df)
# 기억해야 하는 몇가지 속성
print(df.shape) # (4, 3)
print(df.size) # 12 DataFrame 안에 몇개의 요소가 들어있는지 알려줘요
print(df.ndim) # ndim
print(df.columns) # Index(['이름', '학과', '나이'], dtype='object') 반복문 사용시 사용 가능
print(df.values) # 2차원 ndarray
print(df.values.dtype) # object
DataFrame을 만드는 또 다른 방법#
import numpy as np
import pandas as pd
# DataFrame을 만드는 또 다른 방법
# 1. 파일로부터 data를 읽어서 생성
# CSV(Comma Seperated Value)로 부터 데이터를 읽어보자
df = pd.read_csv('./data/student.csv', sep=',', encoding='UTF-8')
# 2. DataBase에 접근해서 내가 원하는 데이터를 일단 추출하고 그 결과를 가지고 DataFrame을 생성
# 기존에 MySQL을 사용했었는데 그 DB를 이용해서 DataFrame을 생성
# python 프로그램으로 Database에 접근해야해요
import pymysql
import numpy as np
import pandas as pd
conn = pymysql.connect(host='localhost', user='banetta', passwd='1234', database='library', charset='utf8')
# print(conn)
sql = 'SELECT bisbn, btitle, bauthor, bprice FROM library.book'
df = pd.read_sql(sql, con=conn)6
# 3. json 파일에서 가져오기
df = pd.read_json('./data/csv_to_json.json')
DataFrame을 저장해보자#
import numpy as np
import pandas as pd
df = pd.read_csv('./data/movie/movies.csv')
# 이렇게 만든 DataFrame을 JSON 파일로 저장할 수 있어요
# CSV to JSON
# 1. file open
# 2. file write
# 3. file close
with open('./data/student_json_column.json', 'w', encoding='utf8') as f:
df.to_json(f, force_ascii=False, orient='columns') # orient로 어느 기준점으로 작성할 지 정한다 default: columns
# df.to_json(f, force_ascii=False, orient='records')
# df.to_json(f, force_ascii=False, orient='index')
# df.to_json(f, force_ascii=False, orient='values')