반응형

안녕하세요. PSYda입니다.

이번 포스팅에서는 Pandas의 DataFrame에 대해 알아보겠습니다.

소개할 내용은 아래와 같습니다.

  • DataFrame 생성
  • DataFrame에 Data추가/삭제/조회

2. DataFrame

DataFrame 이란?

  • 2차원 데이터
  • 인덱스가 같은 하나 이상의 Series가 모여진 데이터
  • DBMS 의 관계형 Table 과 매우 유사

먼저 DataFrame을 사용하기 위해 Pandas 라이브러리를 import 합니다.

# pandas library import
import pandas as pd
from pandas import Series, DataFrame

2.1 DataFrame 데이터 생성

DataFrame을 생성하기 위해 셀에 DataFrame() 이라고 입력하고 괄호 안에서 Shift+tab 을 눌러보면 아래와 같은 정보가 보입니다.

DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

값을 입력해줄 수 있고, Default 가 None이기 때문에 값이 없으면 아무 동작도 하지 않습니다. 속성값들을 하나씩 알아보겠습니다.

  • data : 저장되는 데이터
  • index : index에 대한 정보(미입력시 0부터 순차적으로 부여)
  • columns : 열에 대한 이름값(미입력시 0부터 순차적으로 부여)
  • dtype : 데이터에 대한 타입 명시(미입력시 자체적으로 판단)

예제를 확인하겠습니다.

Data1 = DataFrame([[180,75],[160,65],[170,75], [175,80]],
                  index = ["사람1","사람2","사람3","사람4"],
                  columns = ["키","몸무게"])
Data1

몸무게
사람1 180 75
사람2 160 65
사람3 170 75
사람4 175 80

index와 columns의 경우 선언후에도 별도로 입력할 수도 있습니다.

Data1 = DataFrame([[180,75],[160,65],[170,75], [175,80]])
Data1

0 1
0 180 75
1 160 65
2 170 75
3 175 80
# 인덱스 저장
Data1.index = ["Man1","Man2","Man3","Man4"]
Data1

0 1
Man1 180 75
Man2 160 65
Man3 170 75
Man4 175 80
# 컬럼명 저장
Data1.columns = ["Height","Weight"]
Data1

Height Weight
Man1 180 75
Man2 160 65
Man3 170 75
Man4 175 80

2.2 데이터 추가, 삭제

2.2.1 Column 추가

2.2.1.1 값으로 추가

Data1["나이"] = [30,40,32,33]
Data1

Height Weight 나이
Man1 180 75 30
Man2 160 65 40
Man3 170 75 32
Man4 175 80 33

2.2.1.2 Series 또는 DataFrame에서 추가

# bmi = 몸무게(kg) / 키(m)*키(m)
Data1["BMI"] = Data1["Weight"] / ((Data1["Height"] / 100) * (Data1["Height"] / 100))
Data1

Height Weight 나이 BMI
Man1 180 75 30 23.148148
Man2 160 65 40 25.390625
Man3 170 75 32 25.951557
Man4 175 80 33 26.122449

2.2.2 행 추가

append 함수를 이용해서 행기준으로 데이터를 추가 할 수 있습니다.

2.2.2.1 Series와 List를 이용한 행추가

listOfSeries = [pd.Series([187, 85, 34, 0], index = Data1.columns),
               pd.Series([183, 80, 32, 0], index = Data1.columns)]
Data1 = Data1.append(listOfSeries)
Data1

Height Weight 나이 BMI
Man1 180 75 30 23.148148
Man2 160 65 40 25.390625
Man3 170 75 32 25.951557
Man4 175 80 33 26.122449
0 187 85 34 0.000000
1 183 80 32 0.000000

2.2.2.2 DataFrame을 행기준으로 추가

df = DataFrame([[180,75,30,33],[160,65,40,22]],
               index = ["사람5","사람6"],
               columns = ["Height","Weight","나이","BMI"])
df

Height Weight 나이 BMI
사람5 180 75 30 33
사람6 160 65 40 22
Data1.append(df)

Height Weight 나이 BMI
Man1 180 75 30 23.148148
Man2 160 65 40 25.390625
Man3 170 75 32 25.951557
Man4 175 80 33 26.122449
0 187 85 34 0.000000
1 183 80 32 0.000000
사람5 180 75 30 33.000000
사람6 160 65 40 22.000000

2.2.3 데이터 삭제

drop 함수를 쓰면 행과 열을 삭제 할 수 있습니다.

axis option

  • 0 : 행 기준 삭제
  • 1 : 열 기준 삭제

2.2.3.1 열 삭제

Data1 = Data1.drop("BMI", axis = 1)
Data1

Height Weight 나이
Man1 180 75 30
Man2 160 65 40
Man3 170 75 32
Man4 175 80 33
0 187 85 34
1 183 80 32

2.2.3.2 행 삭제

Data1 = Data1.drop("Man1", axis = 0)
Data1

Height Weight 나이
Man2 160 65 40
Man3 170 75 32
Man4 175 80 33
0 187 85 34
1 183 80 32

2.3 DataFrame 조회

# 예제를 위한 데이터 생성
Data2 = DataFrame([[180,75,30],[160,65,40],[170,75,32], [175,80,33]],
                  index = ["사람1","사람2","사람3","사람4"],
                  columns = ["키","몸무게","나이"])
Data2

몸무게 나이
사람1 180 75 30
사람2 160 65 40
사람3 170 75 32
사람4 175 80 33

2.3.1 Column 조회

DataFrame명["속성명"] 또는 DataFrame명.속성명을 통해 특정 속성명만 조회 할 수 있다.

하나의 속성명을 조회 하면 SeriesType, 여러 속성명을 조회 하면 DataFrame으로 출력된다.

# 키 Column 만 조회
Data2["키"]
사람1    180
사람2    160
사람3    170
사람4    175
Name: 키, dtype: int64
# Type 은 Series
type(Data2.몸무게)
pandas.core.series.Series
# 두 개 이상 컬럼 조회
Data2[["키", "몸무게"]]

몸무게
사람1 180 75
사람2 160 65
사람3 170 75
사람4 175 80

2.3.2 Index 조회

  • DataFrame명.loc["index명"] 을 통해 특정 index만 조회 가능하다.
  • DataFrame명.iloc[index번호] 를 통해 특정 index만 조회 가능하다.

마찬가지로 하나의 index만 조회 할 경우 Series Type, 여러 index의 경우 DataFrame Type으로 출력한다.

Data2.loc["사람1"]
키      180
몸무게     75
나이      30
Name: 사람1, dtype: int64
# 1번 인덱스 --> 사람2의 정보만 출력
Data2.iloc[1]
키      160
몸무게     65
나이      40
Name: 사람2, dtype: int64
# 두 개 index를 index명으로 조회
Data2.loc[["사람1","사람2"]]

몸무게 나이
사람1 180 75 30
사람2 160 65 40
# 여러 개의 index를 index번호로 조회
Data2.iloc[1:3]

몸무게 나이
사람2 160 65 40
사람3 170 75 32

2.3.3 Index 와 column 동시 조회

하나의 index 명과 컬럼명에 해당하는 하나의 값 찾기

  • DataFrame명.at["index명","컬럼명"]
  • DataFrame명.loc["index명","컬럼명"]
  • DataFrame명.loc["index명"]["컬럼명"]
여러 index명과 컬럼명에 해당하는 여러 값 찾기
  • DataFrame명.loc[["index명1","index명2"],["컬럼명1","컬럼명2"]]
  • DataFrame명.loc[["index명1","index명2"]][["컬럼명1","컬럼명2"]]
#사람1의 나이 찾기
Data2.loc["사람1","나이"]
30
#사람2의 몸무게 찾기
Data2.loc["사람2"]["몸무게"]
65
#사람3의 키 찾기
Data2.at["사람3","키"]
170
# 사람1, 사람2 의 키 조회
Data2.loc[["사람1","사람2"]]["키"]
사람1    180
사람2    160
Name: 키, dtype: int64
# 사람1,사람2 의 키와 몸무게 조회
Data2.loc[["사람1","사람2"],["키","몸무게"]]

몸무게
사람1 180 75
사람2 160 65

하나의 index 번호와 컬럼번호에 해당하는 하나의 값 찾기

  • DataFrame명.iat[index번호,컬럼번호]
  • DataFrame명.iloc[index번호,컬럼번호]
  • DataFrame명.iloc[index번호][컬럼번호]
여러 index 번호와 컬럼번호에 해당하는 여러 값 찾기
  • DataFrame명.iloc[index번호1:index번호2,컬럼번호1:컬럼명번호2]
# 사람1의 나이 찾기
Data2.iloc[0,2]
30
#사람2의 몸무게 찾기
Data2.iloc[1][1]
65
#사람3의 키 찾기
Data2.iat[2,0]
170
# 사람1, 사람2 의 키 조회
Data2.iloc[0:2,0]
사람1    180
사람2    160
Name: 키, dtype: int64
# 사람1,사람2 의 키와 몸무게 조회
Data2.iloc[0:2,0:2]

몸무게
사람1 180 75
사람2 160 65

2.3.4 조건 조회

# 키가 170 이상인 사람만 조회
Data2[Data2["키"] >= 170]

몸무게 나이
사람1 180 75 30
사람3 170 75 32
사람4 175 80 33

2.3.5 상위/하위 데이터 조회

  • head(개수) : 위에서부터 개수만큼의 데이터만 출력
  • tail(개수) : 밑에서부터 개수만큼의 데이터만 출력
개수를 쓰지 않을 경우 5개만 출력
Data2.head(2)

몸무게 나이
사람1 180 75 30
사람2 160 65 40
Data2.tail(2)

몸무게 나이
사람3 170 75 32
사람4 175 80 33

위의 Jupyter notebook 내용은 여기 Github에서도 확인 할 수 있습니다.

감사합니다.

반응형

+ Recent posts