Pandas 자료구조
Pandas 자료구조
데이터의 형태나 속성은 매우 다양하다. 이때 서로 다른 형식을 갖는 데이터를 컴퓨터가 이해할 수 있도록 동일한 형식을 갖는 구조로 통합할 필요가 있다. 이때 pandas의 Series와 DataFrame을 사용하여 공통의 포맷으로 정리할 수 있다.
Series
순차적으로 나열된 1차원 배열의 형태를 갖는다. python dictionary와 비슷한 구조이기 때문에 dictionary를 series로 변환하는 방법을 많이 사용한다.
pandas.Series(dictionary)# dictionary
dict_data = {'a': 11, 'b': 2, 'c': 3}
# dictionary to Series
sr = pd.Series(dict_data)
print(type(sr))
print(sr)<class 'pandas.core.series.Series'>
a 11
b 2
c 3
dtype: int64index 속성을 이용해 인덱스 배열(.index)을 따로 선택할 수 있으며, 데이터 값(.values) 배열도 따로 가져올 수 있다.
만약 인덱스를 따로 지정하지 않는다면, default로 정수형 위치 인덱스가 자동으로 지정된다.
0에서 4까지 RangeIndex가 생성된 것을 확인할 수 있다.
이때 특정 범위의 Series Data를 가져올 수도 있다. [] 안에 가져오고 싶은 특정 index위치를 입력하면된다. 만약 정수형 인덱스가 아니라면 '' 혹은 ""로 불러 올 수 있다.
Default로 정수형 인덱스를 생성할 수도 있지만, 특정 인덱스를 지정해서 생성할 수도 있다.
다음과 같이 index=[] 로 특정 인덱스를 리스트 형태로 전달해 생성할 수 있다. 만약 다수의 데이터를 가져오고 싶은 경우에는 다음과 같이 불러올 수 있다.
DataFrame
DataFrame은 2차원 배열 구조로, R의 Dataframe에서 유래됐다. Dataframe의 각 열은 각각의 Series 객체이다. Series를 열벡터(vector)라고 하면, DataFrame은 여러개의 열벡터들이 같은 행 인덱스를 기준으로 줄지어 결합된 2차원 벡터 혹은 행렬(matrix)이다.
DataFrame의 열은 공통의 속성을 갖는 일련의 데이터를 나타내교, 행은 개별 관측대상에 대한 다양한 속성 데이터들의 모음인 레코드(record)가 된다.
다음과 같이 DataFrame을 생성할 수 있다.
행 인덱스, 열 이름
2차원 배열을 DataFrame() 함수 인자로 전달해 DataFrame으로 변환할 때 행 인덱스와 열 이름 속성을 사용자가 직접 지정할 수도 있다.
행 인덱스와 열 이름을 변경할 수도 있다.
특정 인덱스와 열만 변경하고 싶은 경우 rename() 메소드를 사용하면된다.
이때 원본 객체를 직접 수정하는 것이 아니라 새로운 DataFrame 객체를 반환한다. 만약 원본 객체를 변경하려면 inplace=True 옵션을 지정하면된다.
행/열 삭제
drop() 메소드를 이용해 행 혹은 열을 삭제할 수 있다. 이때, 원복 객체를 변경하지 않고 새로운 객체를 반환한다. 만약 원본 객체를 직접 변경하고 싶은 경우 inplace=True 옵션을 주면된다.
행/열/원소 선택
행 선택
구분
loc
iloc
탐색 대상
인덱스 이름(index label)
정수형 위치 인덱스(interger position)
범위 지정
가능(범위의 끝 포함) ex) ['a':'c']
가능(범위의 끝 제외) ex) [3:7] -> 3,4,5,6
범위지정으로 데이터를 가져오는 경우 슬라이싱 간격을 지정해서 가져올 수 있다.
역순으로 인덱싱 하려면 [::-1] 을 하면된다.
열 선택
단일 열을 가져올 때는 다음과 같이 가져올 수 있다. 두 번째 방법(.)은 열 이름이 문자열인 경우에만 가능하다. 단일 열을 가져오는 경우 Series 객체를 반환한다.
[[]] 를 사용해 열을 여러개 선택할 수 있다. [[]] 로 여러개의 열을 가져오는 경우 DataFrame 객체를 반환하며, [[열1]] 로 가져오는 경우에도 DataFrame 객체를 반환한다.
원소 선택
값 추가
열 추가
행추가
하나의 데이터 값을 입력하게 되면 행의 모든 원소에 동일한 값이 추가되며, 후자의 경우 배열의 순서대로 열 위치에 값이 하나씩 추가된다.
원소 값 변경
행 열 위치 변경
Index
특정 열을 행 인덱스로 설정
특정 열을 행 인덱스로 사용할 수 있다. 이때 원본 객체를 변경하지 않고 새로운 객체를 반환한다. 만약 원본 객체에 할당하고 싶은 경우 inplace=True 옵션을 주면된다.
이때 행 인덱스를 여러개를 줄 수도 있으며, 이런 경우 MulitiIndex라고 하며, set_index() 로 새로 인덱스를 지정하면, 기존 행 인덱스는 삭제된다.
행 인덱스 재배열
기존 데이터프레임에 존재하지 않는 행 인덱스가 새롭게 추가되는 경우 NaN(Not a Number) 값이 입력된다. NaN대신 유효한 값을 채우려면 fill_value 옵션에 원하는 값을 입력하면된다.
행 인덱스 초기화
행 인덱스를 정수형 위치 인덱스로 초기화할 수 있다. 이때 기존 행 인덱스는 열로 이동한다.
행 인덱스 기준으로 데이터 프레임 정렬
ascending 옵션을 사용해 오름차순, 내림차순 정렬을 할 수 있다.
특정 열의 데이터 값을 기준으로 DataFrame을 정렬할 수 있다.
ascending 옵션으로 오름차순, 내림차순 정렬을 설정할 수 있다.
산술연산
Pandas 객체의 산술연산은 내부적으로 3단계 프로세스를 거친다.
이때 일대일 대응되는 원소가 없으면 NaN 처리한다.
Series 연산
Series 숫자 연산
숫자 연산을 하면 개별 원소에 각 숫자를 연산자에 맞게 계산한다.
Series + Series
모든 인덱스에 대해 같은 인덱스를 가진 원소끼리 연산한다.
이때 인덱스의 순서가 다르더라도 같은 인덱스를 찾아서 정렬한 후 계산한다. 연산하는 두 Series의 원소 개수가 다르거나, 인덱스 값이 다른 경우에는 NaN 처리를 한다.
이때 NaN이 포함된 값의 연산은 모두 NaN처리가 된다. 이때 NaN으로 반환되는 경우를 피하려면 fill_value 옵션을 설정해 적용할 수 있다.
DataFrame 연산
DataFrame + 숫자
모든 원소에 숫자를 연산자에 맞게 계산한다.
DataFrame + DataFrame
각 데이터 프레임의 같은 행, 같은 열 위치에 있는 원소끼리 계산하며, 어느 한쪽 원소가 존재하지 않거나 NaN이면 연산 결과는 NaN으로 처리한다.
참고
Last updated
Was this helpful?