반응형
반응형

안녕하세요. 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에서도 확인 할 수 있습니다.

감사합니다.

반응형
반응형

안녕하세요. PSYda입니다.
오늘은 Pandas가 무엇인지 알아보겠습니다.

1. Pandas란?

Pandas의 공식 Github에서 설명하는 Pandas는 아래와 같습니다.

 

"관계형" 또는 "레이블이 된" 데이터로 쉽고 직관적으로 작업할 수 있도록 설계되었고 빠르고, 유연한 데이터 구조를 제공하는 Python 패키지

 

관계형, 레이블이 된 데이터라는 말은 엑셀의 데이터나, DBMS의 관계형 테이블 형태와 같은 표형태의 데이터로 이해 할 수 있습니다. 아무튼 데이터를 쉽게 다룰 수 있고, 분석을 용이하게 해주는 파이썬 라이브러리라고 이해 할 수 있습니다.

2. Pandas로 할 수 있는 것은?

구체적으로 Pandas로 할 수 있는 것들은 아래와 같습니다.

  • Python 자료구조와의 호환(List ,Tuple, Dict, NumpyArray 등)
  • 큰 데이터의 빠른 Indexing, Slicing, Sorting 하는 기능
  • 두 데이터 간의 Join(행,열 방향) 기능
  • 데이터의 피봇팅 및 그룹핑
  • 데이터의 통계 및 시각화 기능
  • 외부 데이터를 입력 받아 Pandas 자료구조로 저장 및 출력(CSV, 구분자가 있는 txt, 엑셀데이터, SQL database, XML 등)

3. Pandas 사용하기

Pandas는 파이썬 라이브러리이기 때문에 별도의 설치가 필요한데, Anaconda라는 패키지를 사용하면, Pandas가 기본으로 설치되어 있기 때문에 Anaconda를 이용하는 것을 권장합니다.

Anaconda는 수학, 과학, 데이터 분석 분야에서 사용하는 Python 패키지를 한 번에 설치 할 수 있게 해줍니다. 또한 Jupyter notebook과 같은 IDE 개발 도구도 함께 설치 할 수 있습니다.

Anaconda 공식 홈페이지에서 원클릭으로 쉽게 설치 할 수 있습니다.

4. 포스팅 목자

  1. Pandas의 자료구조-Series
  2. Pandas의 자료구조-DataFrame
  3. 여러 DataFrame 연결하기
  4. Pandas의 파일 입출력
  5. Pandas DataFrame 산술 연산
  6. Pandas DataFrame 통계
  7. Pandas DataFrmae의 sort,rank 함수
  8. Series와 DataFrame에 함수 적용하기
  9. DataFrame의 집계(그룹핑) 함수

다음의 포스팅부터 Jupyter notebook을 사용하여 직접 Pandas를 실습할 예정입니다.
Pandas에 대한 추가적인 정보가 필요할 경우 공식 문서를 참고해주세요.

반응형

+ Recent posts

반응형