AI/Pandas

[Pandas] DataFrame

sangwonYoon 2023. 3. 9. 00:22

파이썬의 데이터 처리 라이브러리인 pandas에서 사용하는 자료구조 중 하나인 DataFrame에 대해 알아보자.


DataFrame

  • Table 구조의 데이터를 저장하는 객체이다.
  • Series가 모여 DataFrame을 구성한다.
  • DataFrame을 구성하는 값(element)들은 numpy의 ndarray로 이루어져 있다.
raw_data = {"A":[1,4,7], "B":[2,5,8], "C":[3,6,9]}

# dict의 key 값이 dataframe의 column으로 변환된다.
df = pd.DataFrame(raw_data, index = ['first', 'second', 'third'])
print(df)
# 출력: 
#         A  B  C
# first   1  2  3
# second  4  5  6
# third   7  8  9

print(df.values)
# 출력:
# [[1 2 3]
#  [4 5 6]
#  [7 8 9]]

print(type(df.values))
# 출력: <class 'numpy.ndarray'>
df = DataFrame(raw_data, columns = ["first_name", "last_name", "age", "city"])

# DataFrame으로부터 Series를 추출하는 코드
# 아래 두 코드는 동일한 역할을 한다.
f_name = df.first_name
f_name = df["first_name"]

 

DataFrame에서 데이터 추출

DataFrame에서 데이터를 추출하는 방식은 크게 3가지가 있다.

  1. column 이름으로 추출
  2. loc 함수
  3. iloc 함수

1. column 이름으로 추출

선택할 column의 이름들을 list에 담아 추출한다.

데이터프레임[[추출할 column의 이름들]]
raw_data = {"A":[1,4,7], "B":[2,5,8], "C":[3,6,9]}

df = pd.DataFrame(raw_data, index = ['first', 'second', 'third'])
print(df[["A", "C"]])
# 출력:
#         A  C
# first   1  3
# second  4  6
# third   7  9

# print(df["second"])와 같이 index의 이름으로는 추출할 수 없다.

row를 기준으로 추출하고 싶을 때는 index의 이름이 아닌, 인덱스의 위치를 사용해 추출해야 한다.

데이터프레임[[추출할 column의 이름들]][인덱스 위치]
raw_data = {"A":[1,4,7], "B":[2,5,8], "C":[3,6,9]}

df = pd.DataFrame(raw_data, index = ['first', 'second', 'third'])
print(df[:2])
# 출력:
#         A  B  C
# first   1  2  3
# second  4  5  6

print(df[["A", "C"]][:2])
#         A  C
# first   1  3
# second  4  6

 

2. loc 함수

데이터프레임.loc[row 이름 , column 이름]

주의해야될 점은, loc 함수는 slicing할 때 파이썬의 slicing과 달리, 마지막 범위가 포함된다.

raw_data = {"A":[1,4,7], "B":[2,5,8], "C":[3,6,9]}

df = pd.DataFrame(raw_data, index = ['first', 'second', 'third'])
print(df.loc[:'second'])
# 출력:
#         A  B  C
# first   1  2  3
# second  4  5  6    second 인덱스가 포함되어 출력된다.

 

3. iloc 함수

데이터프레임.iloc[row 위치 , column 위치]
raw_data = {"A":[1,4,7], "B":[2,5,8], "C":[3,6,9]}

df = pd.DataFrame(raw_data, index = ['first', 'second', 'third'])
print(df.iloc[1, :2])
# 출력:
# A    4
# B    5
# Name: second, dtype: int64