[Pandas] Pandas

Pandas#

Pandas는 고유하게 정의된 2개의 자료구조를 가지고 있다.

  1. Series : 1차원, 같은 데이터 타입을 사용
  2. 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')