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()
를 사용한다. 판다스는 중복되는 인덱스 레이블도 허용하지만, 가능하다면 중복이 없는 컬럼을 인덱스로 지정하는 것이 좋다.
'Pandas 공부해보기' 카테고리의 다른 글
Pandas 3. Series method (0) | 2022.10.10 |
---|---|
Pandas 2. Series object - 2 통계와 산술연산 (0) | 2022.10.01 |
Pandas 2. Series object - 1 (0) | 2022.10.01 |
Pandas 1. 기본 메소드 - 컬럼에 조건식 부여하기 (0) | 2022.09.25 |
Pandas 1. 기본 메소드 - 컬럼의 갯수 세기 value_count (0) | 2022.09.25 |
댓글