반응형

Pandas에서 데이터 분석을 하기 위해 가장 많이 사용하는 것이 DataFrame일 것이다. 

Series를 확장한 것이 DataFrame이라고 이해하면 좀 더 쉽게 다가올 것이라 생각한다. 

기본 속성들을 정리해 보도록 하자.

>> import pandas as pd # pandas 라이브러리를 읽어들임

>> import numpy as np # numpy 라이브러리를 읽어들임


>> df = pd.DataFrame(np.arange(1, 6)) # numpy 배열(1에서 5까지)로부터 data frame을 생성함

>> df = pd.DataFrame(np.array([[70, 71], [90,91]]), columns=['Missoula', 'Philadelphia']) # columns 속성을 사용해 컬럼을 특정할 수 있음.

>> len(df) # 열이 얼마인지 확인하기 위해 len() 함수를 사용함.

>> df.shape # shape 속성으로 DataFrame의 치수(2,2)를 확인할 수 있음.


CSV 파일로부터 DataFrame 만들기

>> sp500 = pd.read_csv('data/sp500.csv', index_col = 'Symbol', usecols=[0,2,3,7]) # read_csv 함수로 이미 data폴더에 존재하는 sp500.csv 파일을 읽어들임. index의 컬럼명을 'Symbol'로 특정하고, 컬럼들 중에서 4개(0,2,3,7)의 특정 컬럼을 읽어들임.

>> sp500.head() # head()로 맨 앞 5개 열의 값들을 미리 볼 수 있음.

>> len(sp500) # 전체 열이 얼마인지 알 수 있음.

>> sp500.shape # sp500(DataFrame)의 치수를 확인할 수 있음.

>> sp500.size # size 속성으로 전체 데이터 크기를 알 수 있음(3컬럼* 전체 열의 수)

>> sp500.index # sp500의 index를 볼 수 있음

>> sp500.columns # sp500의 컬럼들의 이름을 확인해 볼 수 있음

* sp500.csv파일 다운로드


DataFrame 내에서 데이터에 접속하기

>> sp500['Sector'].head() # Sector 컬럼의 데이터들을 보여줌

>> type(sp500['Sector']) # type을 통해 각 컬럼의 구조를 알 수 있음(DataFrame의 단일 컬럼은 Series임)

>> sp500[['Price', 'Book Value']].head() # 2개 컬럼명을 통해 2개 컬럼의 앞 5개 열의 값들을 미리 볼 수 있음
>> sp500.Price # 컬럼명에 스페이스(빈칸)를 포함하고 있지 않다면, 콤마와 컬럼명으로 컬럼 데이터를 읽어들일 수 있음


DataFrame의 열 선택하기

>> sp500.loc['MMM'] # .loc[]를 사용해 index 이름으로 각 열을 읽어들일 수 있음
>> sp500.loc[['MMM', 'MSFT']] # 여러 열을 이름 리스트를 사용해 읽어들일 수도 있음
>> sp500.iloc[[0, 2]] # iloc[]를 사용해 위치에 맞는 각 열을 읽어들일 수 있음
 
>> i1 = sp500.index.get_loc('MMM') 
>> i2 = sp500.index.get_loc('A') # index 특정 이름의 위치를 index.get_loc()를 통해 파악한 후 그 값으로 각 열을 읽을 들일 수 있음
>> sp500.iloc[[i1, i2]]

at[]과 iat[]를 사용해 이름 또는 위치로 스칼라 찾기

>> sp500.at['MMM', 'Price'] # index와 컬럼 이름을 모두 사용해 값을 찾아냄 
>> sp500.iat[0, 1] # 열 0, 컬럼1이라는 위치를 사용해 값을 찾아냄

[] 연산자를 사용해 슬라이싱하기

>> sp500[:5] # 처음 5개 열(0~4)을 읽어들임
>> sp500['ABT' : 'ACN'] # ABT 이름부터 ACN 이름까지의 열들을 읽어들임

부울 선택을 사용해 열 선택하기

>> sp500[sp500.Price < 100] # sp500에서 Price 컬럼의 값이 100보다 작은 열들을 선택함

>> r = sp500[(sp500.Price < 10) & (sp500.Price > 6)]['Price'] # Price 컬럼의 값이 10보다 작고 6보다 큰 경우의 Price 컬럼 값들만 선택함

>> r = sp500[(sp500.Sector == 'Health Care') & (sp500.Price > 100.00)][['Price', 'Sector']] # Health Care 섹터에서 Price가 100보다 큰 Price와 Sector 컬럼 값들을 선택함


DataFrame 조작하기

컬럼명 바꾸기

>> newSP500 = sp500.rename(columns={'Book Value' : 'BookValue'}) # 공백이 있던 컬럼명을 rename() 메서드를 사용해 변경함. 단, 이 방법으로는 변경된 컬럼명을 가진 복사본을 돌려줌.

>> sp500.rename(columns = {'Book Value' : 'BookValue'}, inplace=True) # 복사본이 아닌 원본에서 컬럼명을 변경하려면 inplace=True 파라미터를 사용해야 함


[]와 .insert()로 새로운 컬럼 추가하기

>> sp500_copy = sp500.copy() # copy()로 복사본을 만들 수 있음
>> sp500_copy['RoundedPrice'] = sp500.Price.round() # Price 컬럼 값을 반올림한 신규 컬럼 RoundedPrice를 생성함
>> sp500_copy.insert(1, 'RoundedPrice', sp500.Price.round()) # .insert()를 사용해서 동일하게 신규 컬럼을 생성할 수 있음

연결(concatenation)을 사용해 컬럼 추가하기

>> rounded_price = pd.DataFrame({'RoundedPrice' : sp500.Price.round()}) # RoundedPrice 컬럼을 갖고 있는 DataFrame을 생성함
>> concatenated = pd.concat([sp500, rounded_price], axis=1) # y축(axis=1)을 기준으로 해서 두개의 DataFrame을 연결함. 

컬럼 지우기

del 키워드 또는 .pop() 또는 .drop()를 사용해 DataFrame으로부터 컬럼을 삭제할 수 있다. 

>> copy = sp500.copy()
>> del copy['BookValue']

>> copy = sp500.copy()
>> popped = copy.pop('Sector')

>> copy = sp500.copy()
>> afterdrop = copy.drop(['Sector'], axis = 1)



반응형

+ Recent posts