티스토리 뷰

Pandas는 파이썬에서 데이터 처리를 위해 사용되는 인기있는 라이브러리 입니다. 판다스는 2차원 데이터 처리를 위한 많은 기능을 제공합니다. 판다스는 많은 부분이 넘파이 기반으로 작성됐습니다. 판다스의 핵심 개체는 DataFrame이며, 중요 객체로 Index와 Series가 있습니다. Index는 개별 데이터를 고유하게 식별하는 Key 값이며, Series와 DataFrame은 Index를 키값으로 가집니다. Series는 칼럼이 하나 뿐인 DataFrame이라고 생각하면 됩니다.

 

 

 

 

 

 

 

 

판다스는 다양한 포맷의 파일을 DataFrame으로 로딩할 수 있는 편리한 API를 제공합니다. 대표적으로 csv 파일이 있는데, 이는 칼럼을 콤마로 구분하는 파일 포맷입니다. 만약 다른 지정자로 필드를 구분한다면, read_csv() 메서드의 sep 인자를 해당 지정자로 설정하면 됩니다. head() 메서드를 통해 표시하고 싶은 데이터의 개수를 지정할 수 있습니다.

 

 

 

 

 

 

 

 

 

DataFrame의 크기를 알아보기 위해 shape 변수를 확인했습니다. 반환값은 튜플입니다.

 

 

 

 

 

 

 

 

 

info() 메서드를 통해 총 데이터 건수, 타입, Null 개수 등을 알 수 있습니다.

 

 

 

 

 

 

 

 

 

describe() 메서드는 칼럼별 숫자형(int, float) 데이터의 n-percentile 분포도, 평균, 최댓값, 최솟값 등을 나타냅니다. 숫자형 데이터가 아닌 타입의 칼럼은 출력에서 제외시킵니다. 데이터의 분포도를 개략적 수준에서 요약해줍니다. count 값은 Not Null인 데이터 건수입니다. 요약을 통해 어떤 칼럼이 숫자형 카테고리 칼럼인지 알 수 있습니다. 숫자형 카테고리 칼럼이란 특정 범주에 속하는 값을 코드화한 칼럼입니다. 가령, 성별의 경우 남자를 1로, 여자를 2로 표현한 칼럼입니다. 타이타닉 데이터셋에선 PassengerId, Survived, Pclass가 숫자형 카테고리 칼럼임을 알 수 있습니다(N percentile 값을 통해 알 수 있습니다).

 

 

 

 

 

 

 

 

 

 

DataFrame의 [] 연산자 내부에 칼럼명을 입력하면 Series 형태로 해당 칼럼이 반환됩니다. Series 객체에서 value_counts() 메서드를 호출하면 해당 칼럼값의 유형과 건수를 확인할 수 있습니다. value_counts() 메서드는 지정된 칼럼의 데이터값 건수를 많은 순서대로 정렬하여 반환하며, 데이터의 분포를 확인하는 데 매우 유용하므로 자주 사용됩니다.

 

 

 

 

 

 

 

 

 

Pclass 칼럼을 그저 출력한다면, 인덱스는 단순히 0부터 시작하는 각 데이터의 순서임을 볼 수 있습니다. 하지만 위에서 value_counts() 메서드가 반환한 Series의 인덱스는 단순히 데이터의 순서를 나타내는 것이 아니라, Pclass의 고유 칼럼값임을 알 수 있습니다. 인덱스는 DataFrame, Series가 만들어진 후에도 변경할 수 있으며, 숫자뿐만 아니라 문자열도 가능합니다. 하지만 모든 인덱스는 반드시 고유성이 보장되어야 합니다.

 

 

 

 

 

 

 

 

 

value_counts() 메서드는 기본적으로 Null인 데이터를 무시하고 결괏값을 내놓는다는 점을 유의해야 합니다. Null 값을 포함하여 결괏값을 내놓게하려면 dropna 인자를 False로 지정하면 됩니다.

 

 

 

 

 

 

 

 

 

 

 

DataFrame은 리스트, 딕셔너리, 넘파이 ndarray 등 다양한 데이터로부터 생성될 수 있으며, 그 반대의 연산도 가능합니다. DataFrame은 2차원 데이터를 다루므로, 2차원 이하의 데이터만 DataFrame으로 변환할 수 있습니다. 1차원 데이터를 DataFrame으로 변환하려면 pd.DataFrame() 메서드에 해당 데이터와 컬럼을 지정하면 됩니다.

 

 

 

 

 

 

 

 

 

 

 

2차원 데이터의 경우 각 1차원 데이터에 해당하는 컬럼을 매칭해주면 됩니다.

 

 

 

 

 

 

 

 

 

 

딕셔너리를 DataFrame으로 변환하려면, key에 칼럼명을, value에 데이터를 지정하면 됩니다. 따라서 key는 문자열로, value는 리스트 또는 ndarray를 넣어주면 됩니다.

 

 

 

 

 

 

 

 

 

 

DataFrame을 ndarray, 리스트, 딕셔너리로 변환할 수 있습니다. 먼저 DataFrame에서 values 변수를 통해 ndarray로 변환가능합니다. ndarray에서 tolist() 메서드를 호출하여 리스트로 변환할 수 있습니다. DataFrame에서 to_dict() 메서드에 'list'를 인자로 지정해주면 딕셔너리로 변환할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

DataFrame의 칼럼 생성과 수정 역시 [] 연산자로 쉽게 가능합니다. 새로운 칼럼 'Age_0'을 추가하고 일괄적으로 0을 할당했습니다. 또한 기존 칼럼들을 활용하여 새로운 칼럼을 생성할 수도 있습니다.

 

 

 

 

 

 

 

 

 

 

DataFrame에서 데이터 삭제는 drop() 메서드를 이용합니다. drop() 메서드의 원형은 위와같은데, labels, axis, inplace 파라미터가 핵심입니다. 먼저 axis 0은 row, axis 1은 column 방향 축입니다. axis=0으로 지정한다면 특정 데이터 건을 삭제한다는 뜻이고, axis=1로 지정한다면 특정 칼럼을 삭제한다는 뜻입니다. lables에는 삭제하고자 하는 데이터를 지정합니다. axis=0이라면 삭제하고 싶은 데이터의 인덱스를, axis=1이라면 삭제하고 싶은 칼럼 이름을 넣으면 됩니다.

 

 

 

inpalce의 디폴트 값은 False이며, 원본 DataFrame은 유지한 채, 삭제를 완료한 새 DataFrae을 반환합니다. 반면 값이 True라면 원본 DataFrame에서 데이터를 바로 삭제하며, None을 반환합니다.

 

 

 

 

 

 

 

 

 

 

원본 DataFrame에서 여러 칼럼을 동시에 삭제하는 코드입니다.

 

 

 

 

 

 

 

 

 

 

 

axis=0을 통해 특정 row의 데이터를 삭제할 수 있습니다. 리스트를 통해 인덱스가 0, 1, 2인 데이터를 삭제한 결과를 얻었습니다.

 

 

 

 

 

 

 

 

 

 

DataFrame, Series에서 인덱스를 추출하려면 index 변수를 얻으면 됩니다. 인덱스는 리스트 타입이 아니며, ndarray로 얻고 싶다면 인덱스의 values 변수를 얻으면 됩니다.

 

 

 

 

 

 

 

 

 

 

인덱스 객체에 대한 다양한 슬라이싱 결과입니다. 인덱스 객체 자체에 슬라이싱을 적용하면 RangeIndex 객체가 반환된다는 것과, 인덱스의 값을 수정할 수 없다는 사실을 알 수 있습니다. 당연하게도, Series 객체에 연산을 적용할 때 인덱스는 연산의 대상이 되지 않으며, 오직 식별의 용도로 존재합니다.

 

 

 

 

 

 

 

 

 

 

 

DataFrame, Series에 reset_index() 메서드를 호출하면 인덱스를 연속 숫자형으로 새롭게 할당하며, 기존 인덱스는 index라는 칼럼명으로 추가됩니다.

 

 

 

 

 

 

 

 

 

 

 

reset_index() 메서드는 보통 인덱스를 숫자형으로 매기고 싶을때 사용됩니다. 예를들어, Series에서 value_counts() 메서드의 반환값에서 인덱스는 해당 칼럼의 고유값임을 확인했었습니다. 여기서 reset_index() 메서드로 인덱스를 다시 매겨줄 수 있습니다. drop=True로 지정하면 기존 인덱스는 그냥 삭제됩니다. 삭제되지 않는다면 새로운 칼럼으로 추가되므로, 칼럼이 두 개 이상이 되어 DataFrame 객체가 반환됩니다.

 

 

 

 

 

 

 

Pandas (2)편에선 데이터 셀렉션 및 필터링에 대해 다루겠습니다.

«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31