EEE/파이썬

[파이썬 시작만 N번째?] 실무에서 사용할 능력 키우기_(2) : Pandas 시작

이도비오 2024. 3. 28. 12:18
반응형

새로운 모듈로 들어갔으니 다시 1일차!

[6일차(1일차)]

<파이썬 실전 적용 & 판다스 이론>

* 3V : Velocity+Volume+Variety

* 범주(명목, 서열) / 수치(등간, 비율)

* DIKW 이론

* 비정형데이터는 정해놓은 구조는 없지만 정성적 연구에 활용도 높다(X)

* 빅데이터 가치 산정이 어려운 이유: (활용다변화, 가치변화, 새 가치창출)

* 빅데이터활용테크닉 : 유전알고리즘 등 7가지                                              ※ Module2_1_4_pdf 참고


[7일차(2일차)]

<기본문법>

* 대표적인 공백 문자 : “ “     “\t”(탭)      “\n”(줄바꿈)

* .lower(), .upper(), .replace(), .split()

  : 위 “문자열”메소드들은 문자열을 직접 수정X, 새로운 값을 생성!

  : 새로운 변수 지정해서 처리한 값을 넣어줘야만 한다!

  : .append() 와 달라!

* text[i].startswith(“k”)

* 숫자와 문자는 +로 더해 문장을 만들 수 없다 

  —>  str(숫자) + 문자  또는  f”{숫자형변수이름} 문자”

  —> str(average)+”점”    =    f”{average}점”

 

<디버깅 에러>

* 리팩토링 : 동일한 동작을 하는 코드를 다른 방식으로 짜는 것

* SyntaxError : “:” 안찍어줘서 발생하는 경우가 대부분이다.

* 에러피하기 :   try :    except 에러명 :

 

<Pandas>

* DataFrame : 여러개의 Series 가 열을 이루고 있는 자료형

* Series : DataFrame에서 각 열만 떼온 것.  = df[“칼럼이름”]

* obj : df에서 문자열(str)

* df 변환하려면 다시 덮어주는 작업이 필요!

 

* df = pd.read_csv(“주소”)

* 데이터프레임에 시리즈 데이터 새로 만드는(추가)법

  —>pd.Series([1,2,3,4], index=[“a”, ~,~,~], name=“~~”)

* 칼럼 추가하기 : df[“-”] = 리스트 등

* df.info()  : 만 print없이도 출력됨 / df.head() / df.tail()  /df.shape()

* df[“칼럼명”].value_counts()

* 각 열에 대해 한번에 바꿀때 : for i in columns: 

   df[i]=df[i]. ~~~

* df.sort_values(“칼럼명”, ascending = True) : 오름차순(작~큰)이 기본

 

<형 변환>

* df[“-”].astype(int)

* pd.to_numeric() : 숫자 자료형으로 바꿈 —> int 또는 float

* pd.to_datetime() :  날짜도 자료형이다.

* df[“-”].dt.year / .dt.month   / .dt.day  / .dt.dayofweek

* df[“-“].str.replace(“,”, “”)    <— object형 전용 replace

* for i in columns:                    *obj일때

    df[i]=df[i].str.replace('-','0')

 

<map 함수>

* map() 함수 : 특정 열(칼럼) 전체를 변환하는데 사용

     ※ (replace는 일대일 / map은 여러값에 대한 변경)

  —> 보통 map(딕셔너리)    <—df[“요일”].map(week)

  —> df[“해당열”] 또는 리스트, 튜플 등에 결과 반환

  —> df[].map(적용할 함수, 적용받을 대상)   => map(int, input().split())

 

<apply 함수>

* apply() : map보다 더 다채롭게 사용 가능! <- 함수를 쓸 수 있으니까!

* 반환할 변수 = df[“이용할칼럼”].apply(함수명 또는 lambda x : 리턴값)

* lambda e :  =   이용할칼럼 값이 어떠한 조건일 때~~

  —> (lambda e : "눈/비" if e=="눈" or e=="비" else e)

  —> (lambda e : "혼잡" if e>=8000 else "원활")

  —> (lambda e: e.split()[1])     *추가조건없고 끝 (시구동-> 구)

  —> df[“고령”] = df[“노인구”].apply(lambda e : “o” if e>=0.14 else “X”)

                            <— 새로운 칼럼은 기존 칼럼에 apply된 값이 들어가는 거다!!!

* if ~~ return ~~ 문법

  —> def weather(e):

           if e=='눈' or e=='비':

               return '눈/비'

           else:

               return e


[8일차(3일차)]

<groupby를 이용한 정제>

* df.groupby(“기준칼럼”)[“보고싶은칼럼”].mean()     *안될땐 [[ ]] 해라

  ———> 보고싶은칼럼 여러개면 —> (“-”)[[“-”, “-”]]

* df.groupby([“기준칼럼”, “기준칼럼”]).max()   :  전체적 최대값보여줘

* df.groupby(“무엇을 기준으로”)[“볼 값”].계산()

 

<조건식>

* 판다스 논리연산자 : & | ~(not)   부등호는 한개씩만 사용해서 논리써라

* df[ 조건식 ]   <—— df[ ( ) & ( ) ]

 

<loc, iloc함수 이용한 데이터 추출>

* loc[ ] : 파이썬에서 [인덱스숫자]로 추출한것처럼 df에서 데이터 추출

  —> df.loc[보고싶은행 인덱스, “보고싶은칼럼”]      

*들어간 숫자는 인덱스값이다 —> 4번째행 = 3

  —> df.loc[[24, 67, 126], [“—”, “—”]]

  —> df.loc[ 인덱싱도 가능 ]   <— 이상/이하

* df.loc[ ( ) & ( ) , “-” : ”-”] ※행, 열에 boolean도 가능

※ loc는 이상이하 / iloc는 이상미만                     

* iloc[ ] : 파이썬의 인덱스와 동일 <— (0부터 시작)

  —> df.iloc[행의위치, 열의위치]     * df.iloc[][] 도 가능

  —> 이름도 가능 : df.iloc[0][“Rating”]

* 추출한 데이터 메소드 이용해 추가 처리 가능

  —> df.sum(axis=0)  <-열방향(세로)   /  df.sum(axis=1)  <-행방향(가로)

 

<데이터 정제>

* df.sort_values(“칼럼이름”)   ※기본이 오름차순(“”,ascending = True)

  : 특정칼럼을 기준으로 전체 데이터를 정렬

* df_sorted.head(10)   <— 상위 10개 출력

* df.reset_index()     ※기본이 drop = False : 삭제X

* df.drop( “행/열이름”, axis = o(행) 또는 1(열) )    : 전체 삭제

  —> df = df.drop(["중개소재지", "본번",  "도로명", "거래유형"], axis = 1)

* df = df.rename(columns = {“전” : “new”} )  : 칼럼(열)이름 바꿀때

* round(df["전용면적"]/3.3, 2)     *round(,2): 점 두번째 자리에서 반올림

 

<결측치(Null=NaN) 처리>

* df.isnull()       : 값이 있으면 False - 근데 테이블로 나와 보기 힘들어

  ——> df.isnull().sum()

* df.fillna(대체값)  ——> df[“청소년”].fillna( int(df[“청소년”].mean()) )—>근데생각해보면 이거랑 같다: df[“청소년”] = int(df[“청소년”].mean())

  —>fillna는 ‘결측치’ 채우는 것/ 정상값까지 다 바꾸는 것과는 완전 다르다

* df.dropna(subset = “청소년”)     : 해당열 행결측치 삭제        

* df.dropna()    : 데이터가 누락된 행 삭제   

           ※ ignore_index=True : 결측치 삭제한 df 인덱스 재정렬 깔끔하게

 

<concat, merge 함수 이용한 데이터 병합>

* concat() 함수 : 단순히 A+B

  ——>pd.concat( [df1, df2], axis=0, join=“inner”,ignore_index= True)

  ※ axis = 0 : 위아래로 합쳐라

  ※ join=“outer”  : 합집합    <—  결측치(NaN,낫a#) 대처 필요.

 

* merge() 함수 : 조건에 따라!!

—>df_merge 

           = pd.merge( df1, df2 , on=df1 또는 “칼럼명”, how= “교합왼오”)

   ※ on, how  :  on 해준 열에 대해 교집? 합집?  (교,합,왼,오)

   데이터프레임 대괄호 X  (concat과 차이점)

* concat() 과 merge() 의 차이점이라 한다면!! on이 있는가 없는가.

반응형