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 가 같은 경우에만 브로드캐스팅
'강의자료 > 머신러닝' 카테고리의 다른 글
[딥러닝파이썬] 02-4.파이썬의 Pandas를 다뤄 보자. (11) | 2022.05.24 |
---|---|
[딥러닝파이썬] 02-3.파이썬의 Pandas를 다뤄 보자. (7) | 2022.05.19 |
[딥러닝파이썬] 02-1.파이썬의 Pandas를 다뤄 보자. (9) | 2022.05.03 |
[딥러닝파이썬] 01-4.파이썬의 numpy를 다뤄 보자. (5) | 2022.04.25 |
[딥러닝파이썬] 01-3.파이썬의 numpy를 다뤄 보자. (11) | 2022.04.18 |