반응형

pandas는 Series, DataFrame 두개를 중심으로 데이터를 다룬다.

그 중 DataFrame에서 주로 사용하는 명령을 먼저 간단히 정리해 본 다음, loc와 iloc를 알아볼 것이다.

먼저 라이브러리를 읽어들인다.

import pandas as pd
import numpy as np

그 다음 사용할 데이터를 DataFrame 데이터 유형으로 만든다.

dates = pd.date_range('2023-09-01', periods=6)
df = pd.DataFrame(np.random.randn(6,5), index = dates, columns=['A', 'B', 'C', 'D', 'E'])
df

head() 명령을 사용하면 기본적으로 첫 5행을 보여준다. 괄호에 숫자를 기입하면 그 숫자만큼 행을 더 볼 수 있다.

df.head()

index, columns 명령을 사용하면 DataFrame의 컬럼과 인덱스를 확인할 수 있다.

df.index

df.columns

DataFrame에 값들은 values 명령을 사용해 확인하면 된다. 

df.values

info() 명령을 사용하면 DataFrame의 개요를 알 수 있다.

df.info()

describe() 명령을 사용하면 통계적 개요를 확인할 수 있다. 

df.describe()

sort_values() 명령은 by로 지정된 컬럼을 기준으로 정렬된다. ascending 옵션을 사용하면 오름차순(=True)이나 내림차순(=False)으로 정렬할 수 있다.

df.sort_values(by='C', ascending=True)

반응형

DataFrame.loc

인덱스인 dates 변수를 사용해 특정 날짜의 데이터만 보고 싶으면 df.loc 명령을 사용하면 된다. loc는 location 옵션으로 슬라이싱할 때 loc 옵션을 이용해서 위치 값을 지정할 수 있다.

df.loc[dates[0]]

컬럼을 지정한 후 모든 행을 보고 싶다면, 다음과 같이 하면 된다.

df.loc[:, ['B', 'D']]

행과 열의 범위를 모두 지정해 볼 수도 있다.

df.loc['2023-09-03':'2023-09-05', ['B', 'D']]

 

DataFrame.iloc

loc 명령과 달리 행과 열의 번호를 이용해 데이터에 바로 접근하려고 할 때는 iloc 명령을 사용한다.
iloc를 사용하면 행이나 열의 범위를 지정하면 된다. 특히 콜론(:)을 사용하면 전체 데이터를 불러온다.

아래 명령 iloc[4]는 5번째 행의 전체 컬럼 값을 불러오게 된다. 0번부터 시작하기 때문에 5번 행을 불러오게 된다.

df.iloc[4]

다음과 같이 범위를 정해서 불러올 수도 있다. 2번째 행부터 5번째 앞, 즉 2번째~4번째 행과 0번부터 2번째 열의 데이터만 가져오게 된다.

df.iloc[2:5, 0:3]

범위가 아니라 콤마(,)로 행이나 열을 지정해 데이터를 가져올 수도 있다. 행이나 열에 대해 전체를 가져오고 싶은 곳에는 그냥 콜론(:)을 사용한다.

df.iloc[1:4, :]

DataFrame에서 특정 조건을 만족하는 데이터만 가져올 수도 있다.
다음과 같이 조건을 입력해서 사용한다.

df[df.B > 0]

 

반응형
반응형

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 깃헙)

반응형

+ Recent posts