[빅분기 실기] 판다스 (Pandas) - 데이터 프레임과 시리즈. 데이터 저장 및 불러오기

2024. 11. 2. 16:22빅데이터 분석기사

반응형

1. 데이터프레임과 시리즈

판다스의 데이터는 시리즈 (Series)와 데이터프레임(DataFrame)으로 구성되어 있다.

시리즈는 1차원 형대고, 데이터프레임은 행(rows)과 열(columns)이 있는 2차원 (표) 형태다.

 

1-1. 행과 열

행은 각 데이터/레코드이고 열은 컬럼 전체다. 즉 행은 가로이고 열은 세로이다.

판다스에서 축(axis)을 숫자로 나타낼 때 행은 0, 열은 1로 표시하므로 숫자 순서대로 "행(0)렬(1)"로 기억한다.

 

1-2. 판다스의 별칭

import pandas as pd

 

1-3. 시리즈

시리즈는 pd.Series(데이터)로 만들 수 있다. 데이터는 리스트를 활용해 만들 수 있다.

출력을 하면 인덱스와 값이 출력되고 자료형은 'object'다.

판다스에서 object형은 주로 문자열 데이터를 나타내는 데 사용된다.

 

menu = pd.Series(['비빔밥', '김치찌개', '된장찌개'])
menu

 

0     비빔밥
1    김치찌개
2    된장찌개
dtype: object

 

숫자를 리스트 형태로 만들고 pd.Series()로 감싸게 되면 시리즈로 변경된다. 시리즈 값의 자료형 (타입)은 int다.

판다스는 리스트에 포함된 데이터 타입을 기반으로 시리즈의 데이터 타입을 자동으로 결정한다.

 

price = pd.Series([10000, 9000, 8000])
price

 

0    10000
1     9000
2     8000
dtype: int64

 

1-4. 데이터프레임 (DataFrame)

데이터프레임은 pd.DataFrame({"컬럼명": 데이터})로 만든다.

앞서 만든 2개의 시리즈를 합쳐 데이터프레임으로 만든다.

 

pd.DataFrame({
  "메뉴": menu,
  "가격": price
})

 

데이터프레임 결과

 

데이터프레임을 만들 때 시리즈를 거치지 않고 바로 만들 수 있다.

일반적으로 데이터프레임을 담는 변수명은 DataFrame의 약자인 df를 주로 사용한다.

 

df = pd.DataFrame({
  "메뉴": ['비빔밥', '김치찌개','된장찌개'],
  '가격': [10000, 9000, 8000],
  '원산지': ['국내산','국내산','국내산']
})

df

 

데이터프레임 결과

 

1-5. 컬럼 선택

df['컬럼명']으로 특정 컬럼만 선택해 표시할 수 있다.

 

df['메뉴']

 

0     비빔밥
1    김치찌개
2    된장찌개
Name: 메뉴, dtype: object

 

df.컬럼명과 같이 "."을 사용하는 방법도 있지만 컬럼명에 공백이 있으면 에러가 발생한다.

 

1-6. 데이터프레임과 시리즈 자료형

1개의 컬럼을 데이터프레임으로 만드는 방법은 대괄호로 한 번 더 묶어준다.

 

df[['메뉴']]

 

데이터프레임 결과

 

복수의 컬럼을 선택할 때는 대괄호 2개를 사용한다.

 

df[['메뉴', '가격']]

 

데이터프레임 결과

 

컬럼을 복수로 선택할 때는 주로 리스트를 활용한다. 

 

cols = ['메뉴', '가격']
df[cols]

 

데이터프레임 결과

 

따라서 df는 데이터프레임, df['컬럼명']은 시리즈, df[['컬럼명']]은 데이터프레임이다.

print("df :", type(df))
print("df['가격'] : ", type(df['가격']))
print("df[['가격']] : ", type(df[['가격']]))

 

df : <class 'pandas.core.frame.DataFrame'>
df['가격'] :  <class 'pandas.core.series.Series'>
df[['가격']] :  <class 'pandas.core.frame.DataFrame'>

 

2. 데이터 저장 및 불러오기

카페 메뉴판 데이터를 만들기 위해 메뉴, 가격, 칼로리가 있는 데이터 프레임을 만들고 각 데이터 값을 입력한다.

 

import pandas as pd

df = pd.DataFrame({
  "메뉴" : ['아메리카노', '카페라떼', '카페모카', '카푸치노', '에스프레소', '밀크티', '녹차'],
  "가격" : [4500, 5000, 5500, 5000, 4000, 5900, 5300],
  "칼로리" : [10, 110, 250, 110, 20, 210, 0],
})

df

 

데이터 프레임 결과

 

2-1. csv로 저장

데이터프레임을 저장할 때는 df.to_csv('파일명')으로 저장한다.

 

df.to_csv('temp.csv')

 

 

2-2. csv 불러오기

pd.read_csv('파일명')으로 csv 데이터를 불러올 수 있다.

출력된 결과를 보면 알 수 없는 "Unnamed: 0" 컬럼이 보인다.

데이터를 저장할 때 기본 설정으로 기존 인덱스가 값으로 함께 저장된 것이다.

따라서 가장 왼쪽에 있는 인덱스는 pd.read_csv()로 데이터를 불러올 때 새로 생성된 인덱스이다.

 

temp_df = pd.read_csv('temp.csv')
temp_df

 

데이터 프레임 결과

 

2-3. csv 저장 옵션

인덱스를 제외하고 저장하기 위해 index=False로 설정한다.

 

df.to_csv('cafe.csv', index=False)

df = pd.read_csv('cafe.csv')
df

 

데이터프레임 결과

 

※ 데이터 불러오기 옵션

1. index_col

인덱스를 사용할 컬럼명 또는 열의 번호를 지정한다.

 

pd.read_csv('cafe.csv', index_col = '메뉴')

 

데이터프레임 결과

 

2. usecols

불러올 컬럼명 또는 열의 번호를 지정한다.

 

pd.read_csv('cafe.csv', usecols = ['메뉴', '칼로리'])

 

데이터프레임 결과

 

3. parse_dates

문자열로 된 컬럼을 날짜 datetime으로 변경할 수 있다. 이를 파싱(parsing)이라고 한다.

 

pd.read_csv('data.csv', parse_dates = ['컬럼명'])

 

4. encoding

일반적으로 판다스는 'UTF-8'을 기본 인코딩 방식으로 사용한다.

만약 한국어가 포함된 텍스트 파일이 UTF-8이 아닐 경우 글자가 깨지는 현상을 볼 수 있다.

이를 방지하기 위해 'cp949' 또는 'euc-kr'로 설정한다.

 

pd.read_csv('data.csv', encoding='cp949')
pd.read_csv('data.csv', encoding='euc-kr')