2024.07.11
오늘도 판다스 모듈을 사용해보면서 여러가지 method를 사용하는 연습을 해봤당..
판다스 참 좋더라...
🔒 7번) 데이터셋의 인덱스 구성은 어떻게 되는가?
인덱스 구성을 구하라는 말이 조금 이상하지만.. 앞에 라벨링처럼 되어있는 인덱스의 번호와 간격을 구하라는 것 같다.
🔓 해결 방법
먼저 데이터셋을 전부 불러와 보면 맨 앞 줄에 굵은 글씨로 된게 인덱스!
df.index()
.index( ) 를 사용하면 전체 데이터의 index의 시작부터 끝 번호와 간격의 범위를 알려준다.
🧐 그렇다면 특정 컬럼의 데이터 값으로 정렬해서 데이터를 재구성하면 index 구성이 어떻게 될까!
# 'gameDuration'이라는 컬럼으 값으로 정렬을 해보았다.
df.sort_values('gameDuration')
index의 순서가 뒤바뀌었다. 여기서 .index를 사용해보면,
Rangeindex로 보여주지 않고 뒤섞인 인덱스 번호가 리스트 형태로 출력 되어진다.
🧐 인덱스를 다시 0부터 순차적으로 붙이고 싶다면 .reset_index()를 이용한다.
df.sort_values('gameDuration').reset_index()
.reset_index( ) 는 인덱스를 리셋 시킨다.
이때 'gameDuration'으로 정렬된 index 컬럼이 생성되고, 새로운 index를 부여한다.
🧐 만약에 정렬된 뒤죽박죽인 index 컬럼을 제거하고 싶다면 drop=True를 써준다.
df.sort_values('gameDuration').reset_index(drop=True)
새로 생성 되었던 'index' 컬럼이 사라진 것을 확인 할 수 있다.
지금 이 상태는 'gameDuration' 의 값을 기준으로 정렬되어 있는 데이터셋이 된 것이다.
🔒 8번) 6번째 컬럼의 3번째 행의 값은 무엇인가?
기존 데이터를 가지고 실습했다. (정렬시킨 데이터셋 말고!)
기존 데이터의 6번째 컬럼의 3번째 행의 값 출력하기
🔓 해결 방법
데이터를 보면 6번째 컬럼은 'firstBlood'이다. 그 중에 3번째 행의 값은 위에서부터 0, 1, 2 순으로 카운트해서 '2' 인걸 확인할 수 있다. 이걸 코드를 통해 출력해보자!
df['firstBlood'][2]
# 2
= firstBlood 컬럼의 3번째 행의 값
df.iloc['행숫자', '열숫자']
.iloc[ , ] 이라는 method를 이용해볼 수 있다. 행숫자, 열숫자를 써서 원하는 위치의 값을 가져올 수 있다.
df.iloc[2, 5]
# 2
🔒 9번) 데이터를 로드하라! 컬럼이 한글이기 때문에 적절한 처리하기
한글로 되어있는 새로운 데이터를 로드해보자. 데이터 url은 다음과 같다.
DataUrl = 'https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv'
🔓 해결 방법
동일하게 로드를 하면 되지만 적절한 가공 처리가 필요하다.
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv')
df
이렇게 하면 오류가 뜨는데 오류 설명을 보면..
UnicodeDecodeError 라고 뜬다. 이것은 한글 데이터를 인식하지 못하는 이유가 대부분일 것이라고 한다.
그럼 한글을 인식하기 위한 가공처리를 레스게릿 해보자.
파일 url 뒤에 , encoding='형식' 을 입력해주면 되는데 여기서 형식은 다음과 같은 순서로 차례대로 입력해본다.
- utf-8
- cp949
- euc-kr
- latin
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv', encoding='utf-8')
df
먼저 ufg-8부터 해봤다. 오류가 뜬다. 사유를 보니 이걸로는 읽어올 수 없다고 한다..
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv', encoding='cp949')
df
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv', encoding='euc-kr')
df
cp949와 euc-kr은 잘 출력이 되었다.
출력이 잘 됐으면 잘 된걸로 encoding해서 쓰면 된다.
추가로 latin은 어떨까?
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/Jeju.csv', encoding='latin')
df
코딩은 되지만 한국어로 코딩되지 않았다.. 머.. 영어나 ㄹㅇ 라틴어로만 되는가봉가..?
🔒 10번) 데이터 마지막 3개 행을 출력
밑에서부터 3개의 행을 출력하기
🔓 해결 방법
df.tail(3)
.tail( ) 를 이용해서 밑에서부터 수를 1부터 카운팅해서 출력해준다.
🔒 11번) 수치형 변수를 가진 컬럼을 출력하기
수치형 변수 = int 형이나 float 형
범주형 변수 = object
🔓 해결 방법
df.select_dtypes(exclude=object).columns
df.select_dtypes(exclude=[int, float]).columns
.select_dtype( ) 을 이용하여 볼 수 있다.
include나 exclude를 정해서 원하는 것만 볼 수 있는데 컬럼 뿐만 아니라 데이터 내용도 보고 싶다면,
df.select_dtypes(exclude=object)
이렇게 object형의 자료는 빠지고 수치형만 보여준다.
혹시 내 데이터에 dtype 을 전체적으로 보고 싶으면 .info( ) 를 이용해서 확인하면 된다.
내가 쓰는 모듈의 method를 보고 싶다면? dir(변수) 를 이용한다.
🔒 12번) 범주형 변수를 가진 컬럼을 출력하기
수치형 변수 = int 형이나 float 형
범주형 변수 = object
🔓 해결 방법
df.select_dtypes(include=object).columns
같은 원리로 사용해주면 된다!
🔒 13번) 각 컬럼의 결측치 수를 확인하기
각각의 컬럼에 대해 결측치가 몇개 있는지 확인하기
🔓 해결 방법
먼저 결측치가 있는지에 대한 여부를 확인해보자!
df.isnull()
.isnull( ) 을 이용하면 NA 값을 bool 값으로 표현해서 보여준다.
이제 여기서 각각의 컬럼별로 결측치가 얼마나 있는지를 확인하면 된다.
df.isnull().sum()
컴퓨터는 True를 1로 인식, Flase를 0으로 인식한다.
.sum( ) 을 써서 컬럼별로 더했을 때 숫자가 나오면 결측치의 수가 나오는 것이고 0이면 결측치가 없다는 것이다.
df.isnull().sum(axis=0)
sum(axis=0) 은 sum()과 동일한데,
df.isnull().sum(axis=1)
axis=1 을 적어주면 각 행에 대해서 결측치에 대해 sum을 한 것이다.
df.isnull().sum(axis=1).sum()
# 0
이렇게 코드를 작성하면 행과 열에 대해 모두 합한 것인데,
모든 데이터에 대해서 결측치가 없다고 판정을 할 수 있겠다!
🔒 14번) 각 컬럼의 데이터 수, 데이터 타입을 한 번에 확인하라
한마디로 데이터의 정보를 불러오기!
🔓 해결 방법
df.info()
여기서 Non-Null Count 는 null값이 아닌 유의미한 값을 카운팅해 준 것이다.
🔒 15번) 각 수치형 변수의 분포(사분위, 평균, 표준편차, 최대, 최소)를 확인하라
컬럼별로 수치형 변수의 평균, 최대, 최소, 표준편차, 사분위, count 값을 보이기
🔓 해결 방법
df.describe()
.describe( )
범주형을 굳이 제외하지 않아도 describe()를 쓰면 알아서 수치형 변수만 뽑아서 값을 보여준다!
🔒 16번) 거주인구 컬럼의 값들을 출력하라
'거주인구' 컬럼의 값 출력하기
🔓 해결 방법
df['거주인구']
시리즈 타입으로 출력
df[['거주인구']]
데이터프레임 타입으로 출력
(시리즈가 모여 데이터프레임이 된다고 한다.)
이렇게 불러오는 방법 외의 다른 방법도 있다.
df.iloc[:, 4]
.iloc[ , ] 이용하기!
'처음:끝' 처음과 끝을 나누는 구분자로 : 콜론을 써준다.
그래서 처음부터 끝가지 행을 모두 보여주고 그 중 3번째 컬럼의 데이터값을 보여주라고 한 것이다!
df.loc[:, '거주인구']
.loc[행, 컬럼네임] 은 컬럼 번호가 아닌 네임을 직접 명시한다.
🔒 17번) 평균 속도 컬럼의 4분위간 범위(IQR) 값을 구하여라
IQR = Q3(; 75%) - Q1 (; 25%)
🔓 해결 방법
df['평균 속도'].quantile(0.75) - df['평균 속도'].quantile(0.25)
.quantile( ) 은 괄호 내의 해당 사분위 값을 불러와준다.
🔒 18번) 읍면동명 컬럼의 유일값 개수를 출력하라
중복 없이 컬럼의 데이터 수를 출력하기
🔓 해결 방법
df['읍면동명'].nunique()
# 41
len(df['읍면동명'].unique())
# 41
.nunique( ) 를 이용하여 개수를 알 수 있고,
len( ) 을 써서 리스트의 길이를 보기 때문에 리스트 값을 카운팅 해주므로 알 수 있다.
🔒 19번) 읍면동명 컬럼의 유일값을 모두 출력하라
중복 없이 컬럼의 데이터를 출력하기
🔓 해결 방법
df['읍면동명']
'읍면동명' 컬럼은 이렇게 구성되어 있는데 여기서 겹치는 값을 빼고 출력을 해야한다.
# pandas 모듈 없이 파이썬 코드만으로 한다면
list = []
for name in df['읍면동명'].values:
if name not in list:
list.append(name)
print(list)
# pandas 모듈 사용해서 더 빠르게 출력하자!
df['읍면동명'].unique()
array는 numpy에서 제공해주는 타입이다.
.unique( ) 를 써서 빠르게 유일값을 출력해올 수 있다.
'📒 Today I Learn > 🐼 Pandas' 카테고리의 다른 글
[Pandas] Apply & Map (0) | 2024.07.17 |
---|---|
[Pandas] Pandas? (0) | 2024.07.17 |
[Pandas] Filtering & Sorting (2) (0) | 2024.07.15 |
[Pandas] Filtering & Sorting (1) (0) | 2024.07.12 |
[Pandas] Getting & Knowing Data (1) (0) | 2024.07.10 |