본문 바로가기
Python/데이터 분석

[DataFrame] DataFrame - 생성

by snow_white 2022. 4. 2.

DataFrame은 2차원 배열형식. 표 같은 스프레드시트 자료구조 여러 개의 컬럼을 가지며 서로 다른 종류의 값이 담긴다.
DataFrame은 다양한 방식으로 생성되지만 가장 흔하게 생성하는 방법으로
1)리스트를 값으로 가지는 딕셔너리 방법으로 생성
2)Numpy 배열을 이용해서 생성
3)read_csv(), read_excel()함수등을 이용해서 생성

1. 딕셔너리로 dataframe 만들기

key는 자동으로 column으로 value(리스트)는 values로 들어감

key : [리스트]

import numpy as np
import pandas as pd 
from pandas import Series, DataFrame
import matplotlib.pyplot as plt

df_dic = {
        'state':['Ohio','Ohio', 'Ohio','Nevada','Nevada','Nevada'],
        'year': [2000,   2001,   2002,   2001,   2002,   2003],
         'pop': [ 1.5,   1.7,    3.6,    2.4,    2.9,    3.2]    
}

dicDf=DataFrame(df_dic)
dicDf
print(dicDf.state)
'''
0      Ohio
1      Ohio
2      Ohio
3    Nevada
4    Nevada
5    Nevada
Name: state, dtype: object
'''

칼럼으로 접근하여 데이터 타입 확인하기

pop이라는 columns(key) 값은 내장 함수의 영향으로 메소드 타입이 출력된다.

따라서 dicDf[’키’] 값으로 접근하는 방법을 사용하자

print(type(dicDf.state)) # <class 'pandas.core.series.Series'>
print(type(dicDf.year)) # <class 'pandas.core.series.Series'>
print(type(dicDf.pop)) # <class 'method'> 내장 함수 때문에 메소드 타입으로 나옴
print(type(dicDf['pop'])) # <class 'pandas.core.series.Series'>

 

리스트 길이 만큼 = 행 크기

키 값 개수 = 열 크기

# 리스트 길이 동일하게 맞춰줘야 함!
data1 = {
    'name' : ['James', 'Tom', 'Jane', 'Peter'],
    'address' : ['NY', 'Texas', 'NY', 'LA'],
    'age' : [33, 44, 55, 66]
}

df1 = DataFrame(data1)
df1

 

2. random 모듈 사용하여 만들기

reshape() 으로 데이터 프레임을 2차원으로 만들자

columns, index, values를 지정하여 만들기

# 2. random 모듈 사용
df2 = DataFrame(np.random.randint(10,100,16).reshape(4,4),
                   columns=list('abcd'),
                   index=list('abcd'))
df2

shift + tab ⇒ dataframe 미리 확인하기

dataframe의 columns 값을 모두 수정하자

원본에 바로 반영됨

# 컬럼값들을 다 수정.. columns
df2.columns = ['one', 'two','three','four']
df2

날짜 생성

판다스가 가지고 있는 장점 중 하나가 시계열 데이타 처리를 잘 해 준다.간단히 날짜만 생성해보고 인덱스로 지정하는 것까지 해보자

시계열 데이터 만들기

  • date_range
# frequent
dates = pd.date_range('20200101', periods=10) # 2020년 1월 1일부터 시작하여 10일동안 유지
dates

'''
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
               '2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08',
               '2020-01-09', '2020-01-10'],
              dtype='datetime64[ns]', freq='D')
'''

시계열 데이터를 인덱스로 설정

datedf = DataFrame(np.random.randn(10,4), index=dates, columns=list('ABCD')) #10행 4열, 시계열 데이터 dates
datedf

 

3. CSV 파일을 활용해서 dataframe 생성하기

to_excel, to_scv

# 3. CSV 파일 읽어서 데이터 프레임 생성
df3 = pd.read_csv('../dataset/tips.csv')
df3

tips.csv 파일은 실제 미국의 한 레스토랑에서 제공하는 고객의 축소화 된 정보

tip을 결정하는 요인이 칼럼으로 구성되어 있음 ⇒ 지불 금액에 대한 팁 금액이 정해지는 관례!!

모든 데이터가 칼럼 간 관계가 있지는 않다

팁 금액의 가장 큰 요인으로 작용하는 전체 지불 금액 칼럼과 sub 요인 칼럼을 맞춰보자.

데이터 분석하기 전에 칼럼의 상관 관계에 대한 가설을 세워 증명해보자

ex) 흡연하는 남성! 두 개의 컬럼을 조합하기

  1. 데이터 이해하여
  2. 잘못된 데이터 추출을 방지하고
  3. 시간 낭비를 없애자

좋은 데이터가 노출되면 기업의 자산이나 정보가 노출되고 예민한 부분으로 작용할 수 있다.

tips.csv 에서 day 칼럼에 목요일은 없다는 것을 알기 때문에 주말 운영 레스토랑인 것을 알 수 있다.

✍️
엑셀 데이터는 옵션이 많고 용량이 커서 상대적으로 가벼운 csv를 사용한다.
공공데이터로 올라오는 대부분 데이터가 CSV나 Json 으로 제공된다.

댓글