강의실/머신러닝

[딥러닝파이썬] 02-2.파이썬의 Pandas를 다뤄 보자.

파아란기쁨 2022. 5. 9. 11:51
DataFrame 

DataFrame 이란 시리즈 데이터들의 모음 이며 전체 데이터를 포함하는 테이블이머 기본적으로 2차원 행렬으로 데이터 로딩시 csv 또는 execel 형태를 처리하게 된다.

시리즈에서는 index와 Value 로 이루어져 있는데 비해 DataFrame 은 index 안에 Value가 여러개로 이루어져 있기 때문에 columns 를 가지고 있는 테이블 형태이다.

따라서 하나의 값을 접근하기 위해서는 인덱스와 column을 모두 알아야 접근이 가능

- DataFrame 생성하기

from pandas import Series,DataFrame
import pandas as pd
data = {"이름":["홍길동","이순신","강감찬","유관순"],
        "나이":[10,20,30,40],
        "몸무게":[40.5,72.1,91.3,50.1]}
df = pd.DataFrame(data)
print(df)

 : data 생성시 키값과 Value 값을 가지는 딕셔너리 형태로 생성이 된다.

- Columns 를 이용하여 DataFrame 생성하기

from pandas import Series,DataFrame
import pandas as pd
data = {"이름":["홍길동","이순신","강감찬","유관순"],
        "나이":[10,20,30,40],
        "몸무게":[40.5,72.1,91.3,50.1]}
df = pd.DataFrame(data,columns=["이름","나이"])
print(df)

: columns 을 이용하여 필요한 컬럼만으로 데이터 프레임 생성 

- Columns 를 이용하여 새로운 column 추가

from pandas import Series,DataFrame
import pandas as pd
data = {"이름":["홍길동","이순신","강감찬","유관순"],
        "나이":[10,20,30,40],
        "몸무게":[40.5,72.1,91.3,50.1]}
df = pd.DataFrame(data,columns=["이름","나이","몸무게","키"])
print(df)

- Series(시리즈) 추출하기

from pandas import Series,DataFrame
import pandas as pd
data = {"이름":["홍길동","이순신","강감찬","유관순"],
        "나이":[10,20,30,40],
        "몸무게":[40.5,72.1,91.3,50.1]}
df = pd.DataFrame(data,columns=["이름","나이","몸무게","키"])
print(df.이름) # . 으로 시리즈 추출
print(df["이름"]) # 키값으로 시리즈 추출

- 인덱스로 데이터 접근

from pandas import Series,DataFrame
import pandas as pd
data = {"이름":["홍길동","이순신","강감찬","유관순"],
        "나이":[10,20,30,40],
        "몸무게":[40.5,72.1,91.3,50.1]}
df = pd.DataFrame(data,columns=["이름","나이","몸무게","키"])
print(df.loc[1]) #loc - 인덱스가 1인 데이터 
print(df.iloc[2:]) #iloc - 2번째 데이터 부터 
print(df["이름"].iloc[1:]) #iloc - 이름(column)을 1번째 부터

: loc 는 index 이름, iloc는 index 위치로 접근한다.

 

- column에 새로운 값 할당

from pandas import Series,DataFrame
import pandas as pd
data = {"이름":["홍길동","이순신","강감찬","유관순"],
        "나이":[10,20,30,40],
        "몸무게":[40.5,72.1,91.3,50.1]}
df = pd.DataFrame(data,columns=["이름","나이","몸무게","성인"])
df.성인 = df.나이 >= 20
print(df)

- csv 형태로 변환

from pandas import Series,DataFrame
import pandas as pd
data = {"이름":["홍길동","이순신","강감찬","유관순"],
        "나이":[10,20,30,40],
        "몸무게":[40.5,72.1,91.3,50.1]}
df = pd.DataFrame(data,columns=["이름","나이","몸무게","성인"])
df.성인 = df.나이 >= 20
print(df.to_csv())

- column을 삭제하는 방법:drop,del

from pandas import Series,DataFrame
import pandas as pd
data = {"이름":["홍길동","이순신","강감찬","유관순"],
        "나이":[10,20,30,40],
        "몸무게":[40.5,72.1,91.3,50.1]}
df = pd.DataFrame(data,columns=["이름","나이","몸무게","성인"])
print(df.drop("이름",axis=1)) #메모리에서 삭제가 안되고 삭제된 값이 리턴
del df["몸무게"] #column 자체가 삭제됨
print(df)
df.drop("이름",inplace=True,axis=1) #inplace=True 하면 메모리 값에서 완전 삭제
print(df)

- column 이름으로 선택

from pandas import Series,DataFrame
import pandas as pd
data = {"이름":["홍길동","이순신","강감찬","유관순"],
        "나이":[10,20,30,40],
        "몸무게":[40.5,72.1,91.3,50.1]}
df = pd.DataFrame(data,columns=["이름","나이","몸무게","성인"])
print(df[["이름","나이"]].head(3)) #이름,나이 컬럼 3개 선택

 

 

- 엑셀 파일 로딩 : read_excel

from pandas import Series,DataFrame
import pandas as pd
df = pd.read_excel("https://bigdata.seoul.go.kr/common/file/directFileDown.do?file_nm=open_dataset_list.xlsx&ad=data")
print(df.head())

 

DataFrame 연산

- 기본 두개의 DataFrame 생성하자.

from pandas import Series,DataFrame
import pandas as pd
import numpy as np

df1 = DataFrame(np.arange(3*3).reshape(3,3),columns=["col1","col2","col3"],index=["row1","row2","row3"])
print(df1)
df2 = DataFrame(np.arange(10,26).reshape(4,4),columns=["col1","col2","col3","col4"],index=["row1","row2","row3","row4"])
print(df2)

- df1 + df2,df1.add(df2,fill_value=0)

from pandas import Series,DataFrame
import pandas as pd
import numpy as np

df1 = DataFrame(np.arange(3*3).reshape(3,3),columns=["col1","col2","col3"],index=["row1","row2","row3"])
#print(df1)
df2 = DataFrame(np.arange(10,26).reshape(4,4),columns=["col1","col2","col3","col4"],index=["row1","row2","row3","row4"])
#print(df2)
print(df1 + df2)
print(df1.add(df2,fill_value=0))

: 공간이 맞지 않는 영역은 NaN 으로 연산 됨

: 남은 공간을 기본값으로 채우는 것이 fill_value

- Data Frame + Series 연산

from pandas import Series,DataFrame
import pandas as pd
import numpy as np

df1 = DataFrame(np.arange(3*3).reshape(3,3),columns=["col1","col2","col3"],index=["row1","row2","row3"])
s1 = Series(np.arange(3),index=["row1","row2","row3"])
#print(s1)
print(df1 + s1)
print(df1.add(s1,axis=0)) #axis를 기준으로 브로드캐스팅

: df1.add 에서 축을 기준으로 브로드캐스팅인 index 가 같은 경우에만 브로드캐스팅

 

 

사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 사이버몰의 이용약관 바로가기