본문 바로가기
Pandas 공부해보기

Pandas 4. Dataframe Object - 1

by 유티끌 2022. 10. 29.

Pandas 4. Dataframe Object 개요

판다스의 Dataframe은 행과 열이 있는 2차원 데이터 테이블이다. Series와 맟나가지로 판다스는 인덱스 레이블과, 인덱스 위치를 각 Dataframe 행에 할당하고, 각 열에 레이블과 위치를 할당한다.

생성

city_data = {
    "City" : ["New York City", "Paris", "Barcelona", "Rome"],
    "Country":["United States", "France", "Spain", "Italy"],
    "Population":pd.Series([86000000, 2141000, 5515000, 2873000])
}
cities = pd.DataFrame(city_data)
cities

보통은 딕셔너리로 생성한다. 이 때 키값은 컬럼의 인덱스레이블로 지정된다.
행의 인덱스 레이블은, 사용자가 임의의 인덱스를 정의하지 않았기 때문에, 0부터 시작하는 숫자 인덱스를 생성한다.

행과 열의 인덱스 레이블을 바꾸러면, transpose()T 속성을 접근하면 된다.

cities.transpose()

Numpy의 ndarray로 Dataframe 생성하기

넘파이의 배열로 Dataframe을 생성할 수 있다.

random_data = np.random.randint(1, 101, [3, 5])

row_labels = [
    "Morning",
    "Afternoon",
    "Evening"
]

column_labels = [
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday"
]
temperatures = pd.DataFrame(
    data = random_data,
    index = row_labels,
    columns=column_labels
)

Dataframe은 넘파이의 배열로 생성하게 될 경우, 인덱스 레이블이 지정되어있지 않기 때문에 0부터 증가하는 숫자 레이블을 임의로 부여한다.

이때, index 파라미터와 column 파라미터를 이용해서 인덱스 레이블을 지정할 수 있다.

Series와 Dataframe의 유사점과 차이점

read_csv()

nba = pd.read_csv("../practice_library/nba.csv", parse_dates=["Birthday"])

파일을 읽어들이는 것도 동일하고, 날짜형태의 문자열을, 날짜 포맷으로 바꾸는 것도 가능하다.

dtypes

dtypes 는 , dtype 의 복수형이다. 왜냐하면 데이터프레임은 하나의 열만 가지고 있는게 아니라, 여러 행과 여러 행을 가지고 있기 때문이다.

nba.dtypes

여기서 같은 타입을 가진 컬럼의 개수를 찾으려면 count()를 하면 된다.

nba.dtypes.value_count()

max(), min()

최대값과 최소값의 경우 기본적으로는 맨 첫번째 열을 기준으로 계산한다. 이때 문자열의 경우 알파벳순으로 정렬된다. 즉, max는 Z, min은 A이다.

index, columns

nba.index

를 하게되면 행 인덱스의 구성값을 알 수 있다.

columns 를 하게되면 열 구성을 알 수 있다.

shape, size

shape 속성을 이용하면 가로 세로 크기가 얼마인지를 알 수 있다. size 는 전체 데이터 갯수를 반환한다. 이 때, NaN와 같은 결측값도 포함되는데, 이것을 제외시키기 위해서는 count() 를 사용한다.
count() 는 각각의 열에 몇 개의 데이터가 있는지를 알려준다. 모두 합치려면 count().sum() 을 사용한다.

head, tail, sample, nunique

Series에서 사용하는 방법과 똑같이 사용한다. nunique 메소드는 각각의 컬럼에 고유한 값들은 몇개가 있는지 확인할 수 있다.

nlargest, nsmallest

이것을 사용할 때는 n 파라미터로 몇개를 출력할 것인지를 지정하고, 다음 컬럼명을 지정해주면 해당 컬럼에서 제일 크거나 제일 작은 데이터 n개만큼 뽑을 수 있다.

nba.nlargest(n = 4, columns="Salary")

sum(), mean()

sum()mean() 도 동작하는데, 이때 문자열의 경우는 해당 열의 문자열데이터를 모두 하나로 붙여버린다. 때문에 numeric_only=True 파라미터를 넣어 숫자형태의 데이터만 계산하도록 지정해야한다.

정렬

정렬은 sort_values() 로 할 수 있다. 이 때 정렬을 할 컬럼명을 넘겨주면 된다. 여러 컬럼을 기준으로 정렬하고자 한다면, 배열 형태로 넘겨주면 된다.

nba.sort_values(["Team", "Name"])

앞의 순서대로 Team 컬럼을 정렬한 다음, 해당 컬럼 내에서 다시 Name 컬럼 기준으로 옵션을 줄 수 있다.

정렬 순서도 ascending=[True, False] 등과 같이, 정렬하고자 하는 컬럼 갯수에 맞게 boolean 값을 넘겨주면 된다.

새 인덱스 설정

nba = nba.set_index("Name")

기존의 숫자인덱스가 아니라, 컬럼 중에서 설정하고자 한다면, set_index() 를 사용한다. 판다스는 중복되는 인덱스 레이블도 허용하지만, 가능하다면 중복이 없는 컬럼을 인덱스로 지정하는 것이 좋다.

반응형

댓글