본문 바로가기
● 인공지능, 분석/21.07 코드잇_DS과정

3-1. DataFrame 이론 | Numpy와 Pandas DF의 차이점. DF 만들기

by 0ver-grow 2021. 5. 29.
반응형

R과 파이썬

R의 데이터 보관, 정리, 분석을 담당하는 것이 DataFrame인데

이 기능을 Python의 Pandas Library가 가져옴

Numpy vs Pandas

넘파이 판다스의 DataFrame
  numpy를 기반으로 제작됨
numpy기능 + 데이터 정리, 분석 + 외부데이터 읽고쓰기 + 시각화
1차원, 2차원 2차원 형태의 데이터를 다루기 위한 자료형 
  표형식의 데이터를 담는 자료형
숫자인덱스로 값을 찾음
테이블의 모든 값이 같아야함 (주로 숫자로함)
숫자인덱스가 아닌
행,열에 붙여진 이름으로 값을 찾을 수 있음.

문자열 혹은 숫자로 보관하고 싶은 것을 구분해서 담을 수 있음
2차원 넘파이 : 한 테이블의 모든 값의 타입이 같아야함
넘파이는 주로 숫자위주 
한 테이블에 다양한 자료를 담을 수 있음
단, 각 칼럼의 요소는 동일한 타입만 가능

Numpy의 2차원 배열과 Pandas랑 뭐가 다르지?

1. 설치 기반

pandas library를 사용하려면 numpy가 설치되어 있어야한다.

2. 데이터 타입이 다름

numpy Array는 테이블의 모든 데이터 값이 동일해야함 (주로 숫자 타입)

pandas DataFrame은 원하는 타입으로 작성이 가능 (단, 한 칼럼의 값들은 동일한 타입)

 

DataFrame이란?

2차원 형태의 데이터를 다루기 위한 자료형

행, 열로 구성된 표형식의 데이터를 담는 자료형

칼럼은 데이터의 특징을 의미함.

각 칼럼의 이름으로 데이터의 특징명을 알 수 있음.

 

DataFrame을 만드는 4가지 방법

1. 2차원 리스트, 2차원 numpy array로 DataFrame 만들 수 있음.

> 2차원 리스트

import pandas as pd
two_dimensional_list = [['dongwook', 50, 86], ['sineui', 89, 31], ['ikjoong', 68, 91], ['yoonsoo', 88, 75]]

> 2차원 리스트를 DataFrame화 시키기

> Column에 이름 넣어주기

칼럼명만 출력해보자

my_df.columns

 

행이름만 출력해보자

my_df.index

 

각 칼럼의 자료형을 출력해보자

obejct는 문자열

int64는 숫자

 

2. pandas Series를 담고 있는 리스트로도 DataFrame을 만들 수 있습니다.

list, array, series => pd.DataFrame으로 수정

import numpy as np
import pandas as pd

# 2차원 리스트로 DF 만들기
two_dimensional_list = [['dongwook', 50, 86], ['sineui', 89, 31], ['ikjoong', 68, 91], ['yoonsoo', 88, 75]]

# 2차원 리스트를 np.array를 통해 DF 만들기
two_dimensional_array = np.array(two_dimensional_list)

# series데이터로 DF만들기 
list_of_series = [
    pd.Series(['dongwook', 50, 86]), 
    pd.Series(['sineui', 89, 31]), 
    pd.Series(['ikjoong', 68, 91]), 
    pd.Series(['yoonsoo', 88, 75])
]

# 아래 셋은 모두 동일합니다
df1 = pd.DataFrame(two_dimensional_list)
df2 = pd.DataFrame(two_dimensional_array)
df3 = pd.DataFrame(list_of_series)

print(df1)

3. 파이썬 사전(dictionary)으로도 DataFrame을 만들 수 있습니다.

사전의 key로는 column 이름을 쓰고, 그 column에 해당하는 리스트, numpy array, 혹은 pandas Series를 사전의 value로 넣어주면 됩니다.

import numpy as np
import pandas as pd

names = ['dongwook', 'sineui', 'ikjoong', 'yoonsoo']
english_scores = [50, 89, 68, 88]
math_scores = [86, 31, 91, 75]

dict1 = {
    'name': names, 
    'english_score': english_scores, 
    'math_score': math_scores
}

dict2 = {
    'name': np.array(names), 
    'english_score': np.array(english_scores), 
    'math_score': np.array(math_scores)
}

dict3 = {
    'name': pd.Series(names), 
    'english_score': pd.Series(english_scores), 
    'math_score': pd.Series(math_scores)
}


# 아래 셋은 모두 동일합니다
df1 = pd.DataFrame(dict1)
df2 = pd.DataFrame(dict2)
df3 = pd.DataFrame(dict3)

print(df1)

4. 리스트가 담긴 사전이 아니라, 사전이 담긴 리스트로도 DataFrame을 만들 수 있습니다.

행 : 인덱스, row, record

열 : 칼럼, 데이터의 특징, 속성

반응형