반응형

1. pandas 및 numpy 라이브러리를 읽어들입니다.

>>> import pandas as pd
>>> import numpy as np

2. csv_url이라는 변수에 http 주소를 저장합니다.

>>> csv_url = 'https://raw.githubusercontent.com/guipsamora/pandas_exercises/master/04_Apply/Students_Alcohol_Consumption/student-mat.csv'

3. 아래 주소에서 데이터셋을 읽어들이고, df이라는 변수에 할당합니다.

>>> df = pd.read_csv(csv_url)
>>> df.head() # df의 데이터셋의 구조를 알기 위해 상위 열(5)을 조회합니다.

4. 이 데이터프레임에서 'school' 컬럼에서 'guardian'컬럼까지 분할해서 stud_alcoh 변수에 할당합니다.

>>> stud_alcoh = df.loc[: , 'school':'guardian'] # loc는 행과 열을 인덱싱하는 속성이다. 먼저 전체 행을 선택하기 위해 : (콜론)을 입력하고, 열 중에서 'school'에서 'guardian'까지의 열을 선택했다.

*인덱싱:데이터프레임에서 특정한 데이터만 골라내는 것.

5. 문자열 중 첫 글자를 대문자로 만드는 lambda 함수를 만듭니다.

>>> capitalizer = lamda x: x.capitalize() # capitalize() 메서드는 첫글자를 대문자로 전환합니다.

6. Mjob컬럼과 Fjob컬럼 값들의 첫 글자를 모두 대문자로 만듭니다.

>>> stud_alcoh['Mjob'].apply(capitalizer) # 커스텀 함수인 capitalizer를 데이터프레임의 'Mjob'컬럼에 적용하기 위해 apply 메서드를 적용합니다.
>>> stud_alcoh['Fjob'].apply(capitalizer) # 커스텀 함수인 capitalizer를 데이터프레임의 'Fjob'컬럼에 적용하기 위해 apply 메서드를 적용합니다.

7. 데이터셋의 마지막 행들을 봅니다.

>>> stud_alcoh.tail() 

8. 원본 데이터프레임의 Mjob, Fjob 컬럼이 여전히 소문자인걸 알아차렸나요? 왜 그럴까요? 고쳐봅니다.

>>> stud_alcoh['Mjob'] = stud_alcoh['Mjob'].apply(capitalizer) # 첫글자를 대문자로 만든 후 그 값을 해당 컬럼에 재배치해야 합니다.
>>> stud_alcoh['Fjob'] = stud_alcoh['Fjob'].apply(capitalizer)
>>> stud_alcoh.tail()

9. legal_drinker라는 새로운 컬럼에 불린 값을 반환하는 majority라는 함수를 만듭니다.

(17세보다 많은 경우를 성년(majority)으로 본다는 것을 고려)

>>> def majority(x):
            if x > 17:
                    return True
            else:
                    return False
>>> stud_alcoh['legal_drinker'] = stud_alcoh['age'].apply(majority)
>>> stud_alcoh.head()

(Source : Pandas_exercises 깃헙)

반응형
반응형

1. pandas 라이브러리를 읽어들입니다.

>>> import pandas as pd

2. 아래 주소에서 데이터셋을 읽어들이고, drinks라는 변수에 할당합니다.

>>> drinks = pd.read_csv('https://raw.githubusercontent.com/justmarkham/DAT8/master/data/drinks.csv')
>>> drinks.head() # drinks의 데이터셋의 구조를 알기 위해 상위 열(5)을 조회합니다.

3. 어느 대륙에서 평균보다 맥주를 더 많이 마시는가?

>>> drinks.groupby('continent').beer_servings.mean() # groupby를 사용해서, 대륙별 맥주 소비량 평균을 계산합니다

4. 각 대륙별 와인 소비 현황을 파악하려면 어떻게 해야 하는가?

>>> drinks.groupby('continent').wine_servings.describe() # describe를 사용해서 대륙별 전체 데이터 개수, 평균값, 표준편차, 최소값, 4분위수, 최대값을 보여줍니다

5. 각 대륙별 평균 알코올 소비량은 어떻게 되는가?

>>> drinks.groupby('continent').mean() 

6. 각 대륙별 알코올 소비량 중앙값은 어떻게 되는가?

>>> drinks.groupby('continent').median()

7. 각 대륙별 와인 소비량의 평균값, 최소값, 최대값은 어떻게 되는가?

>>> drinks.groupby('continent').wine_servings.agg(['mean', 'min', 'max'])

(Source : Pandas exercises 깃헙)

반응형
반응형

1. pandas 라이브러리를 읽어들입니다.

>>> import pandas as pd

2. 아래 url 주소에서 데이터셋을 읽어들입니다.

>>> url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/chipotle.tsv'
>>> chipo = pd.read_csv(url, sep='\t') # 탭 구분자로 되어 있는 데이터셋을 읽어들임
>>> chipo.head() # chipo의 데이터 구조 파악을 위해 상위 5개 데이터셋을 조회

>>> chipo.dtypes # item_price 컬럼의 타입이 object인 것을 확인함(가격 계산을 위해 float으로 바꿀 것임) 

>>> prices = [float(value[1 : -1]) for value in chipo.item_price] # item_price컬럼 값을 for 반복문으로 읽고 맨 앞의 $를 제외한 후 float으로 변경하여 prices 변수에 저장함
>>> chipo.item_price = prices # float 타입의 가격을 데이터셋의 item_price에 재할달함
>>> chipo_filtered = chipo.drop_duplicates(['item_name', 'quantity']) # 아이템 이름과 수량이 중복되는 열들을 제외한 후 chipo_filtered 변수에 저장
>>> chipo_one_prod = chipo_filtered[chipo_filtered.quantity == 1] # 수량이 1인 제품들만 선택하여 chip_one_prod 변수에 저장
>>> chipo_one_prod[chipo_one_prod['item_price']>10.item_name.nunique() # 가격이 10보다 큰 아이템 이름들의 숫자를 알려줌(12개), item_name.unique()로 조회하면, 아래와 같이 배열로 보여줌

3. 각 아이템별 가격은 얼마인가?

>>> chipo[(chipo['item_name'] == 'Chicken Bowl') & (chipo['quantity'] == 1 # 아이템 중 'Chicken Bowl'을 선택하고 수량은 한 개인 경우라는 조건을 걸어 chipo 데이터셋에서 조회

4. 아이템 이름으로 정렬하기

>>> chipo.item_name.sort_values() # 또는
>>> chipo.sort_values(by = 'item_name') # 아이템 이름으로 chipo 데이터셋을 정렬

5. 주문한 아이템 중 아이템 가격이 가장 비싼 아이템의 수량은 얼마인가?

>>> chipo.sort_values(by = 'item_price', ascending = False).head(1) # 내림차순으로 아이템 가격을 정렬하기 위해 ascending = Fasle로 설정한 후, head(1)로 가장 상위의 열을 가져옴  

6. 주문한 채소 샐러드 접시는 몇 번이나 주문했는가?

>>> chipo_salad = chipo[chipo.item_name == 'Veggie Salad Bowl'] # chipo 데이터셋의 아이템 이름이 'Veggie Salad Bowl'인 데이터셋만 chipo_salad 변수에 저장함
>>> len(chipo_salad) # 18개가 결과로 나타남

7. 얼마나 많은 사람이 하나 이상의 캔 소다를 주문했는가?

>>> chipo_drink_steak_bowl = chipo[(chipo.item_name == 'Canned Soda') & (chipo.quantity > 1)] # 아이템 이름이 'Canned Soda'와 수량이 1개보다 큰 데이터셋을 chipo_drink_steak_bowl 변수에 저장함
>>> len(chipo_drink_steak_bowl) # 20개가 결과로 나타남

(Source : Pandas_exercises 깃헙)

반응형
반응형

파이썬의 pandas는 이제 필수적으로 알아야 하는 라이브러리가 되었다고 생각한다. 금융 쪽 뿐만 아니라 웹 스크래핑을 통해 데이터를 확보하고 그 자료를 딥러닝 등으로 분석하기 전 전처리에 유용하게 사용할 수 있는 도구로써도 유용하다고 본다.

우선적으로 Pandas DataFrame에서 사용할 수 있는 가장 기본적인 기능에 대해서 정리해 보고자 한다.

이번 글에서는 DataFrame에서 각 열과 컬럼(행)의 이름을 변경하는 것부터 해보자.

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

>>> movies = pd.read_csv('movie.csv', index_col = 'movie_title') # csv파일을 읽어들이면서, 컬럼 중에서 인덱스로 만들 컬럼을 선택한다.

아래와 같이 딕셔너리로 된 대체 인덱스 및 컬럼으로 대입할 변수를 만듭니다.

>>> idx_rename = {'Avatar' : 'Ratava', 'Spectre' : 'Ertceps'}

>>> col_rename = {'director_name' : 'Director Name', 'num_critic_for_reviews' : 'Critical Reviews'}

rename 메서드를 사용해서, 인덱스와 컬럼에 딕셔너리를 전달합니다.

>>> movie_rename = movie.rename(index=idx_rename, columns=col_rename)

>>> movie_rename.head() # DataFrame 형태의 변수에 담긴 상위 열 데이터 일부(5개)를 조회합니다. 

(Source : Pandas Cookbook 깃헙)

앞으로도 짧게 파이썬 관련 유용한 정보를 정리해 보려고 합니다.

 

반응형
반응형

index는 Series 또는 DataFrame에서 값을 찾기 위한 최적화된 도구라고 할 수 있다. 관계형 데이터베이스의 key와 많이 비슷하다고 이해하면 좋을 것 같다.

index 객체는 변경할 수 없다는 특징을 갖고 있다. 

또한, pandas에서 데이터 값들을 검색할 때는 index를 통해 검색하는 것이 컬럼을 가지고 검색하는 것보다 5배 정도 속도가 빠르다

* jupyter notebook에서 %timeit을 사용해 실행 속도를 시뮬레이션할 수 있음.


그렇기 때문에 pandas를 많이 사용하는 경우, index를 목적에 맞게 잘 생성하고 검색하는 데 이용할 수 있도록 할 필요가 있다.

그럼 먼저 pandas index 유형을 정리해 보도록 하자.

 

pandas index 유형

1. Int64Index 

정수 값을 위한 특정 Index로, 64비트 정수형의 불변하는 배열로 되어 있음. 

2. RangeIndex

Int64Index를 최적화한 Index로 최근에 추가됨. (start, stop, step) 특정 정수 값에서 시작하고 끝낼 수 있으며, 간격을 정할 수 있는 정수 기반 Index임. 

3. IntervalIndex

0.0~0.5와 같은 간격 인터벌을 Index로 사용할 수 있음.

4. DatetimeIndex 

나노초 타임스탬프를 저장함.
다음 code는 전체 5시간을 한시간 간격으로 된 index를 생성함.

4. PeriodIndex

년, 월, 날과 같은 기간 데이터를 위한 특정 Index임.

5. MultiIndex

단일 축에 여러 단계의 색인을 표현하는 계층적 Index 객체


반응형
반응형

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)



반응형
반응형

Pandas 자료 구조는 Series와 DataFrame을 말한다고 생각하면 된다. 그 정도로 이 두가지에 익숙해지면 pandas를 잘 활용한다고 할 수 있다는 것이다.

1. Series 정의

Series는 pandas의 기본 블록이라고 할 수 있다. 

일련의 객체를 담을 수 있는 1차원 배열과 같은 자료 구조를 나타낸다. 

Series 객체의 문자열 표현은 왼쪽에 색인(index)을 보여주고 오른쪽에 해당 색인의 값(values)을 보여준다. 

즉, Series의 배열과 색인 객체는 각각 values와 index 속성을 통해 얻을 수 있는 것이다.


2. Series 만들기

>> import pandas as pd # 사용할 라이브러리를 불러온다(이미 설치되어 있다고 가정).

>> import numpy as np

Series는 리스트, 딕셔너리, NumPy 함수, 스칼라 값들로부터 만들 수 있다.

>> pd.Series([10, 11, 12, 13, 14])

>> pd.Series(list('abcde'))

>> pd.Series({'Mike': 'Dad', 

'Marcia' : 'Mom',

'Mikael' : 'Son',

'Bleu' : 'Best doggie ever'})

>> pd.Series(np.arange(4, 9))

>> pd.Series(np.linspace(0, 9, 5))


기본적으로 index 속성을 가지고 index를 지정할 수도 있다.

>> s = pd.Series([1, 2, 3, 4], index = ['a', 'b', 'c', 'd'])


3. Series의 속성들

아래 속성들을 가지고 여러 작업을 해 볼 수 있다.

>> s.values # 값을 확인할 수 있다.

>> s.index # 인덱스를 볼 수 있다.

>> len(s) # 아이템 수를 확인할 수 있다.

>> s.size # 위와 동일하게 아이템 수를 확인할 수 있다.

>> s.shape # 아이템 수와 빈값으로 된 두개 값의 튜플로 돌려준다.

>> s.head(n = 3) # 앞의 3열을 미리 볼 수 있다.

>> s.tail(n= 2) # 뒤의 2열을 미리 볼 수 있다.

>> s.take([1, 3]) # 2번째와 4번째 열 등 지정한 특정 열의 아이템을 볼 수 있다(0부터 시작한다).

>> s['a'] # a 레이블의 값을 돌려준다.

>> s.iloc[[0,2]] # 특정 위치의 값을 찾아 돌려준다.

>> s.loc[['a', 'd']] # 특정 레이블의 값을 돌려준다.

  

4. Series를 부분집합으로 나누기

>> s = pd.Series(np.arange(100, 110), index = np.arange(10, 20))

>> s[1:6] # 두번째 값(0부터 시작하기 때문에)부터 5번째 값(맨 마지막 값은 제외)까지 돌려준다.

>> s.iloc[[1, 2, 3, 4, 5]] # 지정한 위치의 값들은 모두 돌려준다.

>> s[1:6:2] # 두번째 값부터 5번째 값 중에서 2씩 건너 뛰어 돌려준다(1, 3, 5번째 값).

>> s[:5] # 첫번째 값부터 네번째 값까지 돌려준다.

>> s[4:] # 다섯번째 값부터 마지막 값까지 돌려준다.

>> s[::-1] # 마지막 값에서 첫번째 값까지 거꾸로 돌려준다.

>> s[-4::] # 마지막 4개 값들을 돌려준다.


일련의 날짜 값들을 가지고 작업할 수 있다.

>> dates = pd.date_range('2018-03-01', '2018-03-06')

>> temps1 = pd.Series([20, 22, 25, 30, 23, 27], index = dates)

>> temps2 = pd.Series([10, 15, 13, 19, 13, 17], index = dates)

온도 값 차이를 아래와 같이 다른 변수에 저장할 수 있다.

>> temp_diffs = temps1 - temps2

평균값도 계산 가능하다.

>> temp_diffs.mean() 


5. 불린(Boolean) 선택으로 자료를 찾기

>> s = pd.Series(np.arange(0, 5), index=list('abcde'))

>> logical_results = s >= 3

>> s[logical_results] # logical_results 값이 참(true)인 열들만 돌려준다.

>> s[(s >= 2) & (s < 5)] # s값이 2보다 크거나 같고 5보다 작은 열들을 돌려준다.

>> (s >=0).all() # 참(true)을 돌려준다.

>> (s < 2).any() # 참(true)을 돌려준다.

>> (s < 2).sum() # 조건에 맞는 값들의 합을 돌려준다.


<Source : Learing Pandas Second Edition, Packt>














반응형
반응형

요즘 데이터 분석 공부를 하면서 pandas를 거의 매번 사용하게 된다. 그만큼 파이썬에서는 필수적인 라이브러리가 되었기 때문이 아닐까 한다. 

그럼 가장 기본이 되는 데이터 읽는 방법부터 정리해 보도록 하자.

pandas에서는 위와 같은 명령어를 통해 다양한 파일 형태를 읽어들이고, 쓸 수 있다.

그럼 먼저 가장 많이 사용하는 CSV 파일 읽어들이기를 중심으로 정리해 보도록 하겠다.

 

1. CSV와 텍스트 파일들

보통 데이터는 일반적으로 표 형식으로 사용한다. 한 행에 있는 값이 쉼표로 구분되면 CSV(쉼표로 구분된 값)형식이 된다. 이 형식은 아마 가장 잘 알려져 있고 가장 많이 사용하는 형식일 것이다.

다른 표 형식의 데이터는 공백이나 탭으로 구분할 수도 있으며 일반적으로 다양한 유형의 텍스트 파일(일반적으로 .txt 확장명)에 포함되어 있다. 

이 유형의 파일은 가장 일반적인 데이터 소스이며 쉽게 기록하고 해석할 수 있다.

이와 관련하여 pandas는 이 유형의 파에에 대해 특정 기능 세트를 제공한다.

- read_csv

- read_table

 

2. CSV 또는 텍스트 파일에서 데이터 읽기

>> import pandas as pd

S&P500 지수 데이터를 읽어온다(investing 사이트에서 추출).

각 필드는 심볼과 회사 이름, 사업분야, 사업세부분야로 구분되어 있는 CSV 파일이다(이는 기존에 추출해서 저장함. 어떤 CSV파일이든 상관없음).

>> csv_file = pd.read_csv('data/sp500.csv', names = ['symbol', 'name', 'sector', 'industry'])

여기서 읽어들인 데이터의 컬럼들의 헤더명을 설정하기 위해 names=[]을 사용한다.

>> csv_file

알수도 있지만, CSV 파일에서 데이터를 읽어들이는 다른 방법이 있다. CSV파일은 같은 열의 값이 쉼표로 구분된 표로 만들어진 데이터다. CSV파일은 텍스트 파일로 간주되므로 read_table()함수를 사용할 수도 있다(구분기호를 지정하여).

반응형

>> pd.read_table('data/sp500.csv', sep=',')

위 예에서, 모든 컬럼의 헤더 이름을 names=[]로 정의했다. 만약, 정의하지 않고 그냥 읽어들이면 첫번째 열이 컬럼의 헤더 이름이 된다. 그렇기 때문에 첫번째 열을 헤더로 설정하지 않기 위해서 names=[]로 정의하던지, 컬럼 수를 파악하기 어려울땐 header=None을 사용해서 컬럼들에 0으로 시작하는 기본 이름을 할당해야 한다. 또 하나 주어진 컬럼을 인덱스로 변환해서 계층형 인덱스로 할당하기 위해서는, read_csv()에 index_col 옵션을 추가함으로써 수행할 수 있다.

3. 텍스트 파일을 읽기 위해 RegExp 사용하기

콤마와 세미콜론으로 분리된 경우 말고, 다른 구분기호를 사용한 데이터를 읽어들여야 할 경우도 있다. 이 경우 정규표현식이 우리에게 도움이 된다. 사실 sep 옵션을 사용하여 read_table() 암수에서 정규표현식을 지정할 수 있다.

[0-9] 또는 [a-zA-Z] 등은 무척 자주 사용하는 정규 표현식이다. 이렇게 자주 사용하는 정규식들은 별도의 표기법으로 표현할 수 있다. 다음을 기억해 두자.

  • \d - 숫자와 매치, [0-9]와 동일한 표현식이다.
  • \D - 숫자가 아닌 것과 매치, [^0-9]와 동일한 표현식이다.
  • \s - whitespace 문자와 매치, [ \t\n\r\f\v]와 동일한 표현식이다. 맨 앞의 빈 칸은 공백문자(space)를 의미한다.
  • \S - whitespace 문자가 아닌 것과 매치, [^ \t\n\r\f\v]와 동일한 표현식이다.
  • \w - 문자+숫자(alphanumeric)와 매치, [a-zA-Z0-9]와 동일한 표현식이다.
  • \W - 문자+숫자(alphanumeric)가 아닌 문자와 매치, [^a-zA-Z0-9]와 동일한 표현식이다.

<정규표현식 출처 : 점프 투 파이썬 https://wikidocs.net/4308>

skiprows 옵션을 사용하면 원하는 모든 행을 제외할 수 있다. 이 옵션을 사용할 때 주의할 사항이 있다. 첫번째부터 다섯 줄을 제외시키려면 skiprow=5라고 써야 하지만, 다섯번째 줄만 제외하려면 skiprows =[5]라고 써야 한다.

 

4. 텍스트 파일에서 일부분만 읽어들이기

대용량 파일을 처리하거나 이러한 파일의 일부에만 관심이 있는 경우 파일을 부분(청크)으로 읽어야 한다. 이는 반복을 적용하기 위한 것이고 전체 파일을 파싱하는데 관심이 없기 때문이다. 

예를 들어, 파일의 일부분만 읽으려는 경우 구문 분석을 할 줄수를 명시적으로 지정할 수 있다.

>> pd.read_csv('test.csv', skiprows=[2], nrows=3, header=None)

       0    1    2    3      4

0     1    5    2    3   cat

1     2    7    8    5   dog

2     2    2    8    3 duck

nrows 옵션은 읽을 파일의 행 수를 말한다. 대용량 파일을 읽는 데 유용하다.

 

<Source : Python Data Analytics, Apress>

 

 

반응형

+ Recent posts