[Python] 판다스 - 데이터 프레임 이란? (Pandas - DataFrame)
판다스 - 데이터 프레임 이란? (Pandas - DataFrame)
Pandas 란?
Pandas(판다스)는 데이터 조작 및 분석 이 가능한 파이썬의 라이브러리다.
Pandas는 머신 러닝, 딥 러닝에서 데이터를 처리 할 때 필수로 사용된다.
Pandas VS numpy
데이터를 처리 하는 파이썬 라이브러리 중 유명한 것이 Pandas, numpy다.
pandas는 numpy와 비슷하면서도 다르다.
아래는 pandas와 numpy의 차이점이다.
기능 / 특성 | Pandas | NumPy |
---|---|---|
데이터 구조 | DataFrame, Series | ndarray |
데이터 유형 | 다양한 데이터 유형 (숫자, 문자열, 날짜 등) 지원 | 동일한 데이터 유형만 처리 (일반적으로 숫자) |
데이터 정렬 및 라벨링 | 라벨링 가능한 축 (행 및 열에 이름 부여) | 배열은 인덱스 또는 정수 인덱스로만 액세스 가능 |
데이터 조작 및 필터링 | SQL과 유사한 데이터 조작 및 필터링 지원 | 배열 기반으로 데이터 조작 및 필터링 |
결측값 처리 | 결측값(NaN) 처리 및 대체 기능 지원 | 결측값 처리 및 대체 기능 없음 |
데이터 그룹화 및 집계 | 데이터 그룹화 및 집계 기능 지원 | 기본적인 집계 함수만 사용 가능 |
시계열 데이터 처리 | 효율적인 시계열 데이터 처리 지원 | 시계열 데이터 처리에 제한적 |
인덱싱 및 슬라이싱 | 다양한 인덱싱 및 슬라이싱 옵션 제공 | 기본적인 슬라이싱 및 인덱싱만 지원 |
데이터 입출력 | 다양한 데이터 형식을 읽고 쓸 수 있음 | 주로 배열을 파일로 저장하고 읽는 기능 |
성능 및 메모리 관리 | 일반적으로 느리고 메모리 소비가 높음 | 빠르고 메모리 효율적 |
주요 사용 사례 | 데이터 분석 및 조작, 데이터 전처리 | 과학 및 수학 계산, 배열 조작 |
정리 하면 pandas는 데이터 조작 및 분석에 특화되어 있으며 테이블 형식의 데이터에 적합하며, 데이터 프레임, 시리즈, 패널의 데이터 구조를 제공한다.
numpy는 과학 및 수학 계산에 특화되어 있으며 다차원 배열을 다루는 데 뛰어나다.
이때, Pandas는 numpy의 대부분의 기능을 포함하며 더 많은 기능이 있다. 하지만 numpy는 3차원 이상의 배열 데이터를 담을 수 있지만 Pandas는 최대 2차원 데이터 밖에 담지 못한다.(하지만 Pandas에서 CSV 파일을 불러오면 3차원 이상의 데이터를 담을 수 있다.)
즉, 데이터 처리 작업에 따라 두 라이브러리 중 하나를 선택한다.
Pandas import
Pandas 패키지를 설치하고 pd 라는 이름으로 import 해주는 것이 관례다.
import pandas as pd
Pandas 데이터 구조
Pandas는 총 3개의 데이터 구조를 사용하며 이 중 데이터 프레임을 가장 많이 사용한다. 데이터 프레임 데이터 구조를 알아보자.
- 시리즈(Series)
- 데이터 프레임(DataFrame)
- 패널(Panel)
데이터 프레임
데이터 프레임은 2차원 데이터를 매개변수로 전달 한다. 2차원 이므로 행과 열을 가지게 되는 자료구조다.
시리즈가 값, 인덱스로 구성 되었다면, 데이터 프레임은 값, 인덱스, 열(columns)로 구성된다.
데이터 프레임 생성
값, 인덱스, 열 세개의 구성 요소를 넣고 데이터 프레임을 생성해 보자.
import pandas as pd
values = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
index = ['1행', '2행', '3행']
columns = ['1열', '2열', '3열']
df = pd.DataFrame(values, index=index, columns=columns)
print(df)
<결과>
1열 2열 3열
1행 1 2 3
2행 4 5 6
3행 7 8 9
값, 인덱스, 열 출력
값, 인덱스, 열은 다음과 같이 출력 가능하다.
print("값 : \n", df.values)
print("인덱스(행): ", df.index)
print("열 : ", df.columns)
<결과>
값 :
[[1 2 3]
[4 5 6]
[7 8 9]]
인덱스(행): Index(['1행', '2행', '3행'], dtype='object')
열 : Index(['1열', '2열', '3열'], dtype='object')
리스트로 데이터 프레임 생성
리스트로 데이터 프레임 생성 예제다.
인덱스와 열의 이름은 지정하지 않아 숫자로 채워진다.
import pandas as pd
data = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
df = pd.DataFrame(data)
print(df)
<결과>
0 1 2
0 1 2 3
1 4 5 6
2 7 8 9
인덱스 지정 해주기
import pandas as pd
data = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
index = ['1행','2행','3행']
df = pd.DataFrame(data, index=index)
print(df)
<결과>
0 1 2
1행 1 2 3
2행 4 5 6
3행 7 8 9
열 지정 해주기
import pandas as pd
data = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
index = ['1행','2행','3행']
columns = ['1열','2열','3열']
df = pd.DataFrame(data, index=index, columns=columns)
print(df)
<결과>
1열 2열 3열
1행 1 2 3
2행 4 5 6
3행 7 8 9
딕셔너리로 데이터 프레임 생성
딕셔너리로 데이터 프레임 생성이 가능하다.
import pandas as pd
data = {
'1열' : [1, 2, 3],
'2열' : [4, 5, 6],
'3열' : [7, 8, 9]
}
index = ['1행','2행','3행']
df = pd.DataFrame(data, index=index)
print(df)
<결과>
1열 2열 3열
1행 1 4 7
2행 2 5 8
3행 3 6 9
df.head()
처음 부터 n개 까지 조회한다.
주의 할 점은 시작 n개가 0 이 아닌 1이다.
import pandas as pd
data = {
'1열' : [1, 2, 3],
'2열' : [4, 5, 6],
'3열' : [7, 8, 9]
}
index = ['1행','2행','3행']
df = pd.DataFrame(data, index=index)
print(df.head(2))
<결과>
1열 2열 3열
1행 1 4 7
2행 2 5 8
df.tail()
df.head 와 다르게 뒷 부분 n개를 출력한다.
import pandas as pd
data = {
'1열' : [1, 2, 3],
'2열' : [4, 5, 6],
'3열' : [7, 8, 9]
}
index = ['1행','2행','3행']
df = pd.DataFrame(data, index=index)
print(df.tail(2))
<결과>
1열 2열 3열
2행 2 5 8
3행 3 6 9
열 조회하기
보고 싶은 열의 이름을 적으면 해당 열을 출력한다.
import pandas as pd
data = {
'1열' : [1, 2, 3],
'2열' : [4, 5, 6],
'3열' : [7, 8, 9]
}
index = ['1행','2행','3행']
df = pd.DataFrame(data, index=index)
print(df['2열'])
<결과>
1행 4
2행 5
3행 6
열의 특정 값 조회하기
loc 를 사용하여 행의 인덱스, 특정 열을 적어주면 된다.
import pandas as pd
data = {
'1열' : [1, 2, 3],
'2열' : [4, 5, 6],
'3열' : [7, 8, 9]
}
df = pd.DataFrame(data)
print(df.loc[1,'2열'])
<결과>
5
행 조회하기
인덱스 접근에는 명시적, 암시적 인덱스 접근이 있다.
명시적은 인덱스(행)의 이름을 적어주는 것이고 암시적은 인덱스(행)의 시퀀스를 적어 준다.
명시적 인덱스 접근(l;o
loc를 사용하여 index의 이름을 명시하여 조회한다.
import pandas as pd
data = {
'1열' : [1, 2, 3],
'2열' : [4, 5, 6],
'3열' : [7, 8, 9]
}
index = ['1행','2행','3행']
df = pd.DataFrame(data, index=index)
print(df.loc['2행'])
<결과>
1열 2
2열 5
3열 8
Name: 2행, dtype: int64
암시적 인덱스 접근 (iloc)
명시적 접근과 반대로 인덱스에 주어진 이름 대신 숫자를 적는다. 1행, 2행, 3행은 각각 암시적으로 0,1,2 로 볼 수 있다.
이때 iloc를 사용해준다.
import pandas as pd
data = {
'1열' : [1, 2, 3],
'2열' : [4, 5, 6],
'3열' : [7, 8, 9]
}
index = ['1행','2행','3행']
df = pd.DataFrame(data, index=index)
print(df.iloc[1])
<결과>
1열 2
2열 5
3열 8
Name: 2행, dtype: int64
댓글
댓글 쓰기