5 분 소요

DataFrame이란?

2차원 데이터 구조(Series가 모여서)로, 행과 열이 있는 테이블 형태의 데이터 구조입니다. 행(row)과 열(column)은 각각 Series로 구성되어 있어 각각의 index를 가집니다.

DataFrame 생성

Series를 이용한 DataFrame 생성

import pandas as pd

s1 = pd.Series([1, 2, 3], ['a', 'b', 'c'])
s2 = pd.Series([4, 5, 6], ['a', 'b', 'c'])
s3 = pd.Series([7, 8, 9], ['a', 'b', 'c'])

df = pd.DataFrame([s1, s2, s3])
print(df)
  • pd.DataFrame([s1, s2, s3]): DataFrame을 생성합니다. DataFrame의 인자로 Series를 리스트 형태로 전달합니다.
   a  b  c
0  1  2  3
1  4  5  6
2  7  8  9

index 지정

import pandas as pd

s1 = pd.Series([1, 2, 3], ['a', 'b', 'c'])
s2 = pd.Series([4, 5, 6], ['a', 'b', 'c'])
s3 = pd.Series([7, 8, 9], ['a', 'b', 'c'])

df = pd.DataFrame([s1, s2, s3], index=['r1', 'r2', 'r3'])
print(df)
  • pd.DataFrame([s1, s2, s3], index=['r1', 'r2', 'r3']): DataFrame을 생성합니다. DataFrame의 인자로 Series를 리스트 형태로 전달합니다. index를 지정하여 DataFrame을 생성합니다.
    a  b  c
r1  1  2  3
r2  4  5  6
r3  7  8  9

index가 다른 경우

import pandas as pd

s1 = pd.Series([1, 2, 3], ['a', 'b', 'c'])
s2 = pd.Series([4, 5, 6], ['a', 'b', 'd'])
s3 = pd.Series([7, 8, 9], ['a', 'b', 'e'])

df = pd.DataFrame([s1, s2, s3])
print(df)
  • pd.DataFrame([s1, s2, s3]): DataFrame을 생성합니다. DataFrame의 인자로 Series를 리스트 형태로 전달합니다.
     a    b    c    d    e
0  1.0  2.0  3.0  NaN  NaN
1  4.0  5.0  NaN  6.0  NaN
2  7.0  8.0  NaN  NaN  9.0
  • index가 다른 경우, 해당 index에 해당하는 값이 없으면 NaN(Not a Number)으로 표시됩니다.

dictionary를 이용한 DataFrame 생성

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9]
}

df = pd.DataFrame(data)
print(df)
  • pd.DataFrame(data): DataFrame을 생성합니다. DataFrame의 인자로 dict를 전달합니다.
   a  b  c
0  1  4  7
1  2  5  8
2  3  6  9
  • dict의 key가 DataFrame의 column이 됩니다.
  • dict의 value가 DataFrame의 row가 됩니다.
  • dict의 value의 길이가 다르면 오류가 발생합니다.

index 길이가 다른 경우

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8]
}

df = pd.DataFrame(data)
print(df)
  • pd.DataFrame(data): DataFrame을 생성합니다. DataFrame의 인자로 dict를 전달합니다.
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
...
ValueError: All arrays must be of the same length

주요 속성

values

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9]
}

df = pd.DataFrame(data)
print(df.values)
  • df.values: DataFrame의 값들을 조회합니다.
[[1 4 7]
 [2 5 8]
 [3 6 9]]
  • DataFrame의 값들은 ndarray로 반환됩니다.
  • DataFrame의 값들은 2차원 배열로 반환됩니다.
  • DataFrame의 값들은 DataFrame의 index와 column을 제외한 값들입니다.

index

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9]
}

df = pd.DataFrame(data, index=['r1', 'r2', 'r3'])
print(df.index)
  • df.index: DataFrame의 index를 조회합니다.
Index(['r1', 'r2', 'r3'], dtype='object')
  • DataFrame의 index는 Index로 반환됩니다.

columns

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9],
    'd': [10, 11, 12]
}

df = pd.DataFrame(data)
print(df.columns)
  • df.columns: DataFrame의 column을 조회합니다.
Index(['a', 'b', 'c', 'd'], dtype='object')
  • DataFrame의 column은 Index로 반환됩니다.

shape

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9],
    'd': [10, 11, 12]
}

df = pd.DataFrame(data)
print(df.shape)
  • df.shape: DataFrame의 모양을 조회합니다.
(3, 4)
  • DataFrame의 모양은 (행, 열)로 반환됩니다.
  • DataFrame의 모양은 튜플로 반환됩니다.

size

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9],
    'd': [10, 11, 12]
}

df = pd.DataFrame(data)
print(df.size)
  • df.size: DataFrame의 크기를 조회합니다.
12
  • DataFrame의 크기는 행과 열의 곱으로 반환됩니다.
  • DataFrame의 크기는 정수로 반환됩니다.
  • DataFrame의 크기는 DataFrame의 값들의 개수입니다.

ndim

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9],
    'd': [10, 11, 12]
}

df = pd.DataFrame(data)
print(df.ndim)
  • df.ndim: DataFrame의 차원을 조회합니다.
  • 모두 2차원이기 때문에 2가 반환됩니다.
2

index - 상세

index 조회

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9]
}

df = pd.DataFrame(data)
print(df.index)
  • df.index: DataFrame의 index를 조회합니다.
RangeIndex(start=0, stop=3, step=1)
  • RangeIndex는 0부터 3까지 1씩 증가하는 index입니다.

index 변경

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9]
}

df = pd.DataFrame(data)
df.index = ['r1', 'r2', 'r3']
print(df)
  • df.index = ['r1', 'r2', 'r3']: DataFrame의 index를 변경합니다.
    a  b  c
r1  1  4  7
r2  2  5  8
r3  3  6  9

index 이름 변경

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9]
}

df = pd.DataFrame(data)
df.index = ['r1', 'r2', 'r3']
df.index.name = 'index'
print(df)
  • df.index.name = 'index': DataFrame의 index의 이름을 변경합니다.
        a  b  c
index
r1      1  4  7
r2      2  5  8
r3      3  6  9

index 초기화

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9]
}

df = pd.DataFrame(data)
df.index = ['r1', 'r2', 'r3']
df = df.reset_index()
print(df)
  • df = df.reset_index(): DataFrame의 index를 초기화합니다.
   index  a  b  c
0     r1  1  4  7
1     r2  2  5  8
2     r3  3  6  9
  • index가 초기화되면서 기존 index는 column으로 변경됩니다.
  • index가 초기화되면서 RangeIndex가 생성됩니다.
  • index가 초기화되면서 index의 이름이 삭제됩니다.

column을 index로 변경

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9]
}

df = pd.DataFrame(data)
df = df.set_index('a')
print(df)
  • df = df.set_index('a'): DataFrame의 index를 ‘a’ column으로 변경합니다.
   b  c
a
1  4  7
2  5  8
3  6  9
  • index가 ‘a’ column으로 변경됩니다.

columns - 상세

column 조회

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9]
}

df = pd.DataFrame(data)
print(df.columns)
  • df.columns: DataFrame의 column을 조회합니다.
Index(['a', 'b', 'c'], dtype='object')
  • Index는 column의 이름을 가지고 있습니다.
  • dtype=’object’는 column의 데이터 타입이 object라는 의미입니다.

column 이름 변경

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9]
}

df = pd.DataFrame(data)
df.columns = ['col1', 'col2', 'col3']
print(df)
  • df.columns = ['col1', 'col2', 'col3']: DataFrame의 column의 이름을 변경합니다.
   col1  col2  col3
0     1     4     7
1     2     5     8
2     3     6     9

column 이름 변경 - rename

import pandas as pd

data = {
    'a': [1, 2, 3],
    'b': [4, 5, 6],
    'c': [7, 8, 9]
}

df = pd.DataFrame(data)
df = df.rename(columns={'a': 'col1', 'b': 'col2', 'c': 'col3'})
print(df)
  • df = df.rename(columns={'a': 'col1', 'b': 'col2', 'c': 'col3'}): DataFrame의 column의 이름을 변경합니다.
   col1  col2  col3
0     1     4     7
1     2     5     8
2     3     6     9
  • df.rename(columns={'a': 'col1', 'b': 'col2', 'c': 'col3'}): DataFrame의 column의 이름을 변경합니다.

inplace 옵션

inplace 옵션은 DataFrame의 원본 데이터를 변경할지 여부를 결정합니다. inplace=True로 설정하면 원본 데이터를 변경하고, inplace=False로 설정하면 원본 데이터를 변경하지 않습니다. inplace 옵션의 기본값은 False입니다.

  • set_index는 inplace=True를 설정하면 원본 데이터를 변경합니다. 그렇지 않으면 원본 데이터를 변경하지 않습니다. 아니면 다시 변수에 할당해야 합니다.
  • reset_index도 동일합니다.
  • rename도 동일합니다.

해시태그: #python #pandas #dataframe #series #index #columns #inplace #set_index #reset_index #rename

댓글남기기