안녕하세요. 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명"]["컬럼명"]
- 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번호][컬럼번호]
- 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(개수) : 밑에서부터 개수만큼의 데이터만 출력
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에서도 확인 할 수 있습니다.
감사합니다.
'데이터 분석 > Pandas' 카테고리의 다른 글
[Pandas 기초]6.Pandas DataFrame 산술 연산 (2) | 2019.08.22 |
---|---|
[Pandas 기초]5.Pandas 데이터 파일 입출력 (3) | 2019.08.20 |
[Pandas 기초]4.여러 DataFrame 연결하기(Join) (0) | 2019.08.17 |
[Pandas 기초]2.Pandas의 자료구조-Series (0) | 2019.08.15 |
[Pandas 기초]1.Pandas 란 무엇인가? (0) | 2019.08.13 |