#day06_03_pandas.py
# -pandas
# 판다스 예제
# 판다스 이용하기 및 자료구조
import pandas as pd
import numpy as np
pd.__version__
#Series 정의
obj=pd.Series([1,2,3,4,5])
obj
#Serise 의 값 확인
obj.values
#Series 의 인덱스 확인
obj.index
#Series 연산
#모든 자리에 3을 더해라
obj + 3
#평균
obj.mean()
##데이터 프레임 만들기
#비정형 데이터 예) list
[1,3] #대표적인 비정형 데이터라고 볼 수 있다 .
#반정형 데이터 : 데이터에 대해 순번 또는 키 등을 알 수 있으나 테이블의 형태는 아니다. key와 value로 이뤄진 형태.
my_dict={'a':[1,3],'b':[1,2],'c':[2,4]}
my_dict
#정형 데이터 : 반정형과의 가장 큰 차이는 행과 열을 가지는 테이블의 형태를 가진다.
pd.DataFrame(my_dict)
#리스트 타입으로 데이터 프레임 만들기
mylist = [['tom',20],['nick',30],['korea','40']]
mylist
a= pd.DataFrame(mylist,columns=['name','age']) #columns 를 통해 열 이름 지정
#DataFrame 의 조회
## loc : 라벨값 기반의 2차원 인덱싱
## iloc : 인덱스 기반의 2차원 인덱싱
## at :라벨값 기반의 인덱싱 (데이터1개 )
## iat : 인덱스 기반의 인덱싱 ( 데이터1개 )
my_dict={'a':[1,4,7],'b':[2,5,8],'c':[3,6,9]}
df = pd.DataFrame(my_dict)
#df.loc[행,열]
display(df.loc[:,:]) #전체
display(df.loc[0,'b']) #1행의 b열 조회
display(df.loc[:,'a']) #a열만 조회
display(df.loc[0,:]) #1행만 조회
#실습, c열의 합계를 구해라
#Series 형태로 조회되기 때문에 조회된 시리즈를 sum() 하면 합계가 조회된다.
df.loc[:,'c'].sum()
#df의 각 열의 평균
df.mean()
#실습, df에서 각 열의 평균의 합계를 구해라
df.mean().sum()
#실습, df에서 0,2행의 b열의 합계를 구해라
#df.loc([[0,2],'b']).sum()
#a열의 값이 4보다 큰 행부터 전체 행을 조회해라
df.loc[df.a > 4,:]
#iloc[행, 열]
#df에서 0,1 행의 전체 열을 조회해라
df.iloc[[0,1],:]
#df에서 0행의 0,2열을 조회해라
df.iloc[0,[0,2]]
#at[행,열]
#하나의 스칼라 값을 조회하는 경우 사용
df.loc[0,'a']
df.at[0,'a']
#값 조회 시 시간 차이가 크다는 것을 확인해 볼 수 있다.
get_ipython().run_line_magic('timeit', "df.loc[0,'a']")
get_ipython().run_line_magic('timeit', "df.at[0,'a']")
#df에 값을 추가하기
#마지막 행에 값 추가
#append 함수 이용하는 방법
add_df = pd.DataFrame({'a':[10],'b':[11],'c':[12]})
df= df.append(add_df) #원본 데이터에는 반영X
#row 인덱스 초기화
df.reset_index(drop=True)
#df에 값을 추가하기
#순서를 지정해서 추가하기
df.loc[1,:] = [13,14,15]
df
#df에 값을 추가하기
#순서를 지정해서 추가힉
#python의 문법으로 추가
df.loc[5] = [10,11,123]
df
#열 추가하기
df.loc[:,'d']=['one','two','one','three','four']
df.loc[:,'d'].isin(['one','two'])
#실습. df의 d열에 one,two 가 포함된 행의 전체 열만 조회
df.loc[df.loc[:,'d'].isin(['one','two']),:]
df2 = df.loc[df.loc[:,'d'].isin(['one','two']),:]
df2.reset_index(drop=True)
#df2의 e열에 0,1 행에만 값을 1로 넣고, 2,3행의 값은 결측치로 만들기
df2.loc[df2.a<5,'e'] = 1
#결측 데이터를 제외하고 조회하는 방법(dropna())
df2.dropna()
#결측데이터 조회하기 (isnull())
df2.isnull()
df2.isnull().sum()
df2.isnull().sum().sum()
#결측데이터에 값을 채우기(fillna)
df2.fillna(value=5)
df3=df2.loc[:,['a','b','c']]
df3
#각 열의 총합
df3.sum()
#각행의 총합
df3.sum(axis=1)
#람다
#익명함수(부를 수 있는 이름이 없음)
(lambda x:print(x))(1) #1이 x로 전달된 후 그 뒤의 print()의 인수로 들어간다. 결과는 print(1)
df3.apply(lambda z:z)
#기본함수
#명명함수(부를 수 있는 이름이 존재) , 재사용이 가능하다.
def print_k(x):
print(x)
(df3.apply(lambda z:z.max()))
#실습
#df3의 각 열의 max값 - min값을 구해서 새로운 시리즈를 만들어라
(df3.apply(lambda z:z.max()-z.min()))
df3
댓글
댓글 쓰기