뒤죽박죽 데이터분석 일기장
[Pandas] 판다스 기초 1 본문
안녕하세요. 이번 포스트에서는 판다스의 기초적인 DataFrame을 생성하는 방법과 수정하는 법을 정리해 보겠습니다.
판다스란?
월스트리트 퀀트 개발자 웨스 메키니가 금융 데이터에 대한 계랑적 분석을 수행하기 위해 고성능의 유연한 툴을 만들 필요가 있다고 행각하여서 개발해낸 데이터 분석 라이브러리입니다.
판다스는 주로 수치형 테이블과 시계열 데이터를 조작하고 운영하는데 사용됩니다.
판다스 import 그리고 DataFrame 형성
판다스를 사용하기 위해선 2가지의 라이브러리를 출력해 줍니다.
# 필요한 라이브러리를 로드합니다.
# pandas, numpy를 불러옵니다.
import pandas as pd
import numpy as np
저번 파이썬 시간에 배웠던 대로 판다스와 넘파이는 alias을 저장해 사용합니다.
데이터프레임 생성
빈 DataFrame을 형성할 수 있습니다.
df = pd.DataFrame()
이제 빈 데이터 프레임에 내용을 추가해 보겠습니다.
df['메뉴'] = ["아메리카노", "카페라떼", "카라멜 마끼아또", "초코라떼", "미숫가루", "딸기라떼"]
cafe
결과:
빈 DataFrame 생성 후, column 값을 key 값으로 설정해 리스트를 넣어주면 위와 보이는 것 처럼 1차원 series가 표 형태로 나타난 걸 확인할 수 있습니다.
메뉴에 가격을 입력해 보겠습니다.
cafe["가격"] = 4000
cafe
결과:
새로운 key와 value를 입력하는 경우
1. 가격이라는 새로운 column이 생성됩니다.
2. 새로 생긴 가격 column의 모든 값이 4000으로 할당됩니다.
column이 항목이 2개 이상이면 이제부터는 2차원 데이터, 즉 행렬입니다.
하지만 하나의 column을 특정해 출력한 경우 :
df["가격"]
결과:
series, 즉 벡터이며, 1차원 데이터입니다.
이번에는 메뉴에 있는 카페 음료의 가격을 각각 지정해서 수정해보겠습니다.
cafe["가격"] = [1500, 2000, 4500, np.nan, 3000, 6000]
cafe
결과:
수정 하는 리스트 안에 np.nan은 null, 없는 값을 의미합니다. 모든 nan, null 값의 데이터 타입은 float 입니다.
파이썬은 pd.series를 출력하면 데이터 타입을 보여주는 기능을 가지고 있습니다.
※ 기억해야 할 3가지
1. pd.series 안에 np.nan 값이 있으면 데이터 타입은 float이다.
2. pd.series 안에 1개라도 문자열이 있으면 데이터 타입은 문자열입니다.
3. pd.series 안에 소수점으로 떨어지는 수가 있으면 데이터 타입은 float이다.
DataFrame 열 삭제하기
DataFrame column을 삭제하기 전에 2개의 column을 추가적으로 생성해 보겠습니다.
cafe["브랜드"] = "스타벅스"
cafe["원두"] = "칠레산"
cafe
결과:
어이쿠! 실수로 원두 원산지 명을 잘못 기입했습니다. 그래서 원두 column을 모두 삭제해주려고 합니다.
cafe = cafe.drop(columns='원두')
cafe
결과:
성공적으로 원두 칸이 삭제된 것을 확인한 것을 알 수 있습니다.
추가적으로 알아두면 좋을 내용은
열을 삭제할 때는 : 1
행을 삭제할때는 : 0을 사용합니다.
예시)
행 | cafe = cafe.drop["원두", axis = 0] |
열 | cafe = cafe.drop["원두", axis = 1] |
DataFrame 요약하기
DataFrame의 기본적인 정보를 알려고 하면 info 함수를 사용하면 column 종류, 데이터타입, 개수
cafe.info()
결과:
DataFrame 열, 행 출력하기
# 데이터 프레임의 크기를 출력합니다.
# (행, 열)
df.shape
# 결과
# (8,4)
DataFrame 데이터 타입 출력하기
# 데이터의 타입만 봅니다.
df.dtypes
# 결과
# 약품명 object
# 가격 float64
# 지역 object
# 종류 object
# dtype: object
잠깐!!!

info는 소괄호가 있는 반면, 열과 행을 출력하는 shape, 그리고 데이터타입만을 출력하는 dtype에는 소괄호가 없습니다.
이건 어떤 차이 때문일까요?
간단하게 설명하자면 소괄호 있는 건 메서드, 즉 클래스 안에 있는 함수 입니다. 하지만 소괄호가 없는건 클래스 안에 attribute 입니다.
이번에는 데이터 요약 안에서도 수치형 기술통계와 번주형 기술 통계에 대해서 알아보겠습니다.
1. 수치형 기술통계
cafe.describe()
결과:
위의 통계의 뜻을 정리해보겠습니다
count | 결측치를 제외한 빈도수 |
mean | 평균 |
std | 표준편차 |
min | 최소값 |
max | 최대값 |
'25%', '50%', '75%'
|
순차정렬 했을 때 앞에서부터 25%, 50%, 75% 위치에 있는 값
|
2. 범주형 기술통계
cafe.describe(include = 'object') #범주형 데이터의 경우 소괄호 안에 include = 'object'을 기입해줍니다.
결과:
용어정리:
count | 결측치를 제외한 빈도수 |
unique | 유일값 |
top | 최빈값 |
freq | 최빈값의 빈도수 |
데이터 출력하기
1. 키워드 기준으로 출력
df['메뉴']
결과:
카페 메뉴 데이터 프레임에서 메뉴 행을 출력했을때 벡터 형태로 출력됩니다.
그럼 데이터 프레임으로 출력하려면? 아래와 같이 대괄호를 한 번 더 씌어주면 됩니다.
df[['메뉴']]
결과:
만약 두개의 행을 동시에 출력하고 싶다면??
cafe_1 = cafe[['메뉴', '가격']]
cafe_1
결과:
2. 행을 기준으로 출력하기
df. loc 이라는 함수를 이용해서 인덱스나 키워드를 기입해서 원하는 행을 출력할 수 있습니다.
# 인덱스 번호로 첫번째 데이터 가져오기
# loc == locate
cafe.loc[0] #첫번째 열
결과:
위에서 2개의 행 데이터 가져오기
인덱스를 리스트화해서 .loc() 함수 안에 넣으면 원하는 행 데이터를 출력할 수 있습니다.
# 위에서 2개의 행 데이터 가져오기
cafe.loc[[0, 1]]
결과:
3. 행과 열을 기준으로 함께 출력하기
# loc[행, 열]
cafe.loc[0, "메뉴"] #첫번째 행 데이터의 메뉴
# loc[행, 열]
cafe.loc[[0,1,2], ["메뉴", "가격"]] #1~3번째 행 데이터의 메뉴와 가격
결과:
4. loc vs iloc
우리가 데이터 프레임의 특정 열과 행을 출력할 때는 loc 이나 iloc 함수를 사용한다. 이 두 함수는 어떤 차이점을 지니고 있을까?
loc
cafe.loc[:3,:'메뉴']
결과:
iloc
cafe.iloc[:3,:3]
결과:
정리하자면 loc 은 인덱스, 컬럼명으로 가져오는데 iloc은 순서대로 값을 가져옵니다.
특정값을 가진 데이터 불러오기
이번에는 카페에서 라떼만 출력을 해보겠습니다
# 포함한 값을 불린 형태로 출력
cafe["메뉴"].str.contains("라떼")
결과:
불린 값을 지닌 벡터 형태로 출력됩니다. 데이터 프레임으로 출력하려면 중괄호를 한 번 더 씌어주면 됩니다.
cafe[cafe["메뉴"].str.contains("라떼")]
결과:
TIP :
만약 행 값에 영문이 있다면 str.lower()나 str.upper()을 사용해 모두 소문자 또는 대문자로 변경할 수 있습니다.
요약하자면, dataframe_이름[].str.안에_포함_함수_여러가지
즉 help function이나 documentation을 읽으면서 여러가지 기능이 있는걸 확인할 수 있고 실제 응용을 할 수 있습니다.
특정값 이상을 가진 데이터 불러오기
이번에는 카페에서 2000원이 넘는 음료수를 출력해 보겠습니다. 이 경우 연산자를 통해 불린 값을 벡터로 출력하고 리스트화 시킨 불린 값을 인덱싱하면 출력가능합니다. 예를 들어보겠습니다.
cafe[cafe["가격"] > 2000]
결과:
정렬하기
카페의 가격을 오름차순으로 정렬해 보겠습니다.
cafe.sort_values(by = ["가격"])
결과:
만약 내림차순으로 출력하고 싶다면
cafe.sort_values(by = ["가격"], ascending = False) 로 안에 parameter을 추가해주면 됩니다.
사실 document를 확인하면 안에 어떠한 값들이 들어가 기능을 할 수 있는지 확인할 수 있습니다.
이번에는, 가격은 오름차순 그리고 메뉴는 내림차순으로 동시에 정렬해 보겠습니다.
cafe.sort_values(by = ["메뉴", "가격"], ascending = [False, True])
결과:
파일로 저장하기
이제 마지막으로 파일로 저장하는 코드에 대해서 알아보도록 하겠습니다.
지금까지 우리가 만든 dataframe은 우리가 원하는 파일 형식으로 저장할 수 있습니다.
우선, csv 형태로 저장해 보도록 하겠습니다.
cafe.to_csv("pandas_example.csv", index=False) #인덱스 값 저장 x
이렇게 코드를 작성하면 인덱스 값을 제외한 dataframe이 csv 파일 형태로 저장하고 싶습니다.
만약, 다른 파일 형식으로 저장하고 싶다면 dateframe_name.to_파일형식("파일이름") 으로 코드를 입력하면 됩니다.
그리고 저장된 csv 파일을 다시 저장하고 싶다면 아래와 같이 입력하면 됩니다.
pd.read_csv("pandas_example.csv")
지금까지 판다스 기초문법에 대해서 복습해 봤습니다. 혹시 틀린 부분이 있다면 댓글로 남겨주시면 감사하겠습니다. 지금까지 읽어주셔서 감사합니다.
'Pandas' 카테고리의 다른 글
[Pandas] 판다스 기초 - 네이버 증권 일일 시세 크롤링 (0) | 2023.01.14 |
---|---|
[Pandas] 판다스 기초 - 네이버 증권 기사 크롤링 (0) | 2023.01.14 |