Pandas

응방·2022년 3월 16일
0

Kaggle Courses

목록 보기
2/3

이번 Course는 python으로 데이터를 다룰때 자주 사용하는 라이브러리인 Pandas의 사용법에 관한 정리이다. 헷갈리기 쉬운 내용이나, 기억했을 때 도움이 될 것이라고 느끼는 내용 위주로 정리해보려고 한다.

1. Dataframe, Series

Dataframe은 각각의 entry들로 구성되어 있는 표를 의미한다. 각각의 entry들은 value를 가질 수 있다.
예를 들어, pandas.DataFrame({'Me': [100, 50], 'You': [200, 70]})의 경우 다음과 같은 표가 생성된다.

MeYou
0100200
15070

반면, Series는 표가 아닌 list의 형태를 띠고 있다. 예를 들어, pandas.Series([1,2,3,4,5])는 1,2,3,4,5의 값을 갖는 list의 형태를 띤다고 볼 수 있다. 따라서, Series들이 모여서 Dataframe의 형태를 이룬다고 생각해볼 수 있다.

Dataframe과 Series에는 기본적으로 0, 1, 2, 3..의 index가 부여되는데 이를 조작하고 싶다면 index=[idx1, idx2, ...]의 option을 부여할 수 있다.

2. Data read, write

pandas.read_csv()를 통해 csv 데이터를 읽고, df.to_csv()를 통해 Dataframe을 csv 파일로 저장한다. read_csv()의 경우에 index_col 옵션을 통해서 몇 번째 column이 index column인지 지정해줄 수 있다.

3. Data indexing, Selecting

df.iloc을 통해 index를 이용한 접근을, df.loc을 통해 데이터의 값을 이용한 접근을 할 수 있다. 이 때, 첫 번째 요소가 row를 의미하고, 두 번째는 column을 의미한다는 것을 알고 있어야 한다. 또한, df.iloc[0:100]의 경우 0~99 index를 가져오는 반면 df.loc[0:100]의 경우에는 0~100을 가져오는 것에 유의해야 한다.

4. Data mapping, apply

각각의 데이터 중 특정 조건을 만족시키는지 확인하기 위한 방법으로 df.map() 을 사용할 수 있다. 예를들어 reviews라는 Dataframe에서 description 항목에 'tropical'이 들어가는지 확인하기 위해서는

tropical_count = reviews.description.map(lambda desc: "tropical" in desc)

과 같이 map함수 안에 람다함수를 사용함으로써 구현 가능하다.

보다 복잡한 함수를 사용하고 싶은 경우에는 df.apply()를 사용할 수 있는데, 이러한 경우에는

def calc_star(row):
    if row.country == 'Canada':
        return 3
    else:
        if row.points >= 95:
            return 3
        elif row.points >= 85:
            return 2
        else:
            return 1

star_ratings = reviews.apply(calc_star, axis='columns')

이런식으로 상대적으로 복잡한 경우에 대해서도 조건 만족 여부를 구할 수 있다.

단 df.map()과 df.apply()는 기존 Dataframe을 변화시키는 것이 아니기에 변수에 assign하여 사용해야 한다는 것을 주의할 필요가 있다.

5. Groupby, sort_values

groupby는 특정 feature로 데이터를 정렬하고 싶을 때 사용하게 되는 방법이다. SQL을 공부할때도 마찬가지로 자주 사용하게 된다. 예를 들어 여러가지 column이 있는 데이터셋에서 각각의 특정 국가에 해당하는 데이터가 얼마나 있는지 확인하고 싶을 때는 다음과 같이 확인 가능하다.

df.groupby('country').size()

groupby는 반드시 한가지로만 해야하는 것은 아니고, 여러 가지 feature로 groupby하기 위해서는 list의 형태를 넣어주면 multi-indices groupby가 가능하다.

df.groupby(['country', 'author']).size()

sort의 경우에는 sort_values안에 정렬하고자 하는 값을 넣어서 활용할 수 있다. 이 때, 내림차순으로 정렬하기 위해서는 ascending 옵션을 False로 부여해야 한다. (Default: 오름차순)

6. value_counts, isnull, replace

먼저 Series.value_counts() 는 주어진 시리즈에서 동일한 요소가 몇번 등장하는지에 따라 데이터를 정리해주는 방법이다.

isnull()은 특정 데이터가 null값이나 NaN 같은 것으로 채워져있는지 확인하는데 사용한다. 확인에 그치지 않고 null값들을 다른 값으로 대체하기 위해서는 fillna()를 사용하여 null값들을 대체하여 사용할 수 있다. null값을 대체하는 경우가 아니라 범용으로 특정 값들을 대체하기 위해서는 replace()를 사용하면 된다.

7. concat, join

concat과 join은 서로 다른 두 Dataframe을 합치고자 할 때 사용하는 방법이다. 이 때, concat은 두 Dataframe의 column이 일치하는 경우에 사용하고 join은 두 Dataframe의 column간에 차이가 있는 경우에 사용하게 된다.

(출처) : Kaggle Course

profile
시작이 반이다

0개의 댓글