달구는 오늘도 코딩중!

[Pandas] DataFrame의 구조

austin lee 2024. 1. 9. 04:35

DataFrame에 대해 알아보기에 앞서, Series 자료형에 대해 먼저 알아보겠습니다.

DataFrame이 matrix와 같다면, Series는 한 열과 같습니다.

딕셔너리와 매우 유사한데, 딕셔너리가 key-value로 이루어져 있듯이 Series는 index-value로 구성됩니다.

import pandas as pd

s = pd.Series({'상민':'컴공', '휘주':'화학', '도헌':'기계', '혜진':'생명'})
print(s)
더보기

< 출력 결과 >

리스트를 이용해 Series 객체를 만들 수도 있습니다. 딕셔너리의 경우에는 key가 index에 대응했던 반면, 리스트의 경우에는 index에 정수형 위치 인덱스, 즉 리스트의 인덱스가 Series에서 index가 됩니다.

s = pd.Series(['상민', '휘주', '도헌', '혜진'])
print(s)
더보기

< 출력 결과 >

 

DataFrame은 앞서 얘기했듯이 matrix라고 생각하면 됩니다. Series를 여러 개 붙여놓은 것이라고 생각할 수 있는데, 마찬가지로 딕셔너리를 DataFrame으로 변환할 수 있습니다.

data = {'이름':['상민', '휘주', '도헌'], '트랙':['CSE', 'CHEM', 'ME'], '나이':[21, 21, 21]}
df = pd.DataFrame(data)
print(df)
더보기

< 출력 결과 >

행 이름을 설정하지 않을 경우에는 자동으로 정수형 위치 인덱스를 부여합니다. column name과 row index는 다음과 같이 지정할 수 있습니다.

 

리스트 또한 DataFrame으로 변환할 수 있습니다. 딕셔너리를 DataFrame으로 변환하면 Series처럼 각 key가 하나의 column vector을 구성하는 것과는 달리, 리스트를 DataFrame으로 변환하면 리스트의 각 행이 DataFrame의 행으로 변환됩니다.

data2 = [['CSE', 21, 'M'], ['ME', 21, 'M'], ['CHEM', 21, 'M']]
df2 = pd.DataFrame(data2)
print(df2)
더보기

< 출력 결과 >

행 이름과 열 인덱스를 표시하지 않을 경우, 둘 다 정수형 위치 인덱스가 자동으로 부여됩니다.

행 이름과 열 인덱스는 다음과 같이 직접 설정할 수 있습니다.

#선언할 때
df3 = pd.DataFrame(data2, index=['상민', '도헌', '휘주'], columns=['트랙', '나이', '성별'])

#선언 후 수정할 때
df2.index = ['상민', '도헌', '휘주']
df2.columns = ['트랙', '나이', '성별']

 

 

DataFrame에서 다음과 같이 특정 원소에 접근할 수 있습니다.

print(df3.loc['상민', '트랙'])
print(df3.iloc[0, 0])
더보기

< 출력 결과 >

CSE

CSE

DataFrame을 사용할때 이 2개를 주의해야 합니다. 먼저, 특정 원소에 접근하는 방법이 리스트에서의 인덱싱과 비슷하면서도 다르다는 것입니다. 또한, 정수형 위치 인덱스는 항상 존재한다는 것입니다. 행, 열과 상관없이 직접 이름을 지정해 주어도 항상 정수형 위치 인덱스는 존재하며 iloc를 사용해 접근할 수 있습니다.

 

DataFrame의 가장 큰 특징으로, 대괄호를 이용해 여러 개의 행과 열에 동시에 접근할 수 있습니다.

(이때, 리스트처럼 슬라이싱도 가능합니다)

print(df3.loc[['상민', '휘주'], ['트랙', '나이']])
더보기

< 출력 결과 >

다음과 같이 행 또는 열을 추가할 수 있습니다. 코드를 보면 딕셔너리에서 key-value쌍을 추가하는 것과 매우 유사하다는 것을 느낄 것입니다.

# 행 추가
df3.loc['혜진'] = ['BIO', 22, 'F']

# 열 추가
df3['학점'] = 4.3
df3['지역'] = ['경북', '서울', '강원', '서울']
print(df3)
더보기

< 출력 결과 >

새로운 열을 추가할 때 하나의 값만 넣으면 이를 모든 행에 일괄적으로 적용하게 됩니다.

'달구는 오늘도 코딩중!' 카테고리의 다른 글

[Python] 함수  (0) 2023.08.01
[Python] 집합 자료형  (0) 2023.07.13
[Python] 반복문  (0) 2023.07.02