[Python_bigdata] 파이썬 판다스Pandas 기본 개념 및 활용

#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




댓글