[EDA] pandas, DataFrame 기초

svenskpotatis·2023년 8월 25일
0

서울시 CCTV 현황 데이터 분석(1)

  • .: 현재 폴더에서, ..: 상위 폴더에서 실행
  • Pandas에서 엑셀 및 텍스트 파일 읽기
    : Pandas = 스테로이드 맞은 엑셀
import pandas as pd
pd.function  #사용
  1. python, pandas: 데이터 확보, 정리, 정렬
  2. matplotlib: 그래프 그리기
  3. regression using numpy: 전체적인 경향 파악
  4. insight and visualization: 경향에서 벗어난 데이터 강조
  • pandas dataframe 의 구조:
image.jpg1image.jpg2
  • 데이터 불러오기: data = pd.read_csv("경로", encoding="utf-8")
CCTV_Seoul.columns
# 데이터의 columns[0]의 이름 바꾸기
CCTV_Seoul.rename(columns={CCTV_Seoul.columns[0]: "구별"})

# 원본 바꾸기
CCTV_Seoul.rename(columns={CCTV_Seoul.columns[0]: "구별"}, inplace=True)

# 두 번째 header부터, 사용하는 column: B, D, G, J, N
pop_Seoul = pd.read_excel("../data/Seoul_Population.xls", header=2, usecols="B, D, G, J, N")

# 가독성 있는 작성법 - 예시1
pop_Seoul = pd.read_excel(
    "../data/Seoul_Population.xls", header=2, usecols="B, D, G, J, N"
)

# 가독성 있는 작성법 - 예시2
pop_Seoul.rename(
    columns={
        pop_Seoul.columns[0]: "구별",
        pop_Seoul.columns[1]: "인구수",
        pop_Seoul.columns[2]: "한국인",
        pop_Seoul.columns[3]: "외국인",
        pop_Seoul.columns[4]: "고령자",
    },
    inplace=True
)
  • 엑셀 설정
    자료를 읽기 시작할 행: header
    읽어올 엑셀의 column: usecols

📌 Pandas

import pandas as pd
import numpy as np    # numpy: 수치해석적 함수가 많음. 

Series

  • index와 value로 이루어져 있습니다.
  • 한 가지 데이터 타입만 가질 수 있습니다.
pd.Series()
>>>
Series([], dtype: object)
# object: pandas에서 사용하는 문자열 데이터(=python에서 string)
pd.Series([1, 2, 3, 4], dtype=np.float64)
>>>
0    1.0
1    2.0
2    3.0
3    4.0
dtype: float64
pd.Series(np.array([1, 2, 3]))
>>>
0    1
1    2
2    3
dtype: int32
pd.Series({"Key": "Value"})
>>>
Key    Value
dtype: object
  • 날짜 데이터
pd.date_range("20210101", periods=6)
# periods: 기간

DataFrame

  • Series data type이 모여 DataFrame data type 이룸.
  • pd.Series(): index, value
  • pd.DataFrame(): index, value, column
df = pd.DataFrame(data, index, columns)
  • df.head(n): 상위 n개 데이터 (default=5)
  • df.tail(n): 하위 n개 데이터 (default=5)
  • df.index: index 값 리스트 형태로 반환
  • df.columns, df.values
  • df.info(): 데이터 프레임의 기본 정보 확인
  • df.describe(): 데이터 프레임의 통계 정보 확인

데이터 정렬

  • sort_values()
  • 특정 컬럼(열)을 기준으로 데이터를 정렬
# B기준 오름차순 정렬
df.sort_values(by="B")  

# B기준 내림차순 정렬
df.sort_values(by="B", ascending=False)  

# 원본에 저장
df.sort_values(by="B", ascending=False, inplace=True)

데이터 선택

# 한 개 컬럼 선택
df["A"]
df.A   # 컬럼명이 문자열인 경우 

# 두 개 이상 컬럼 선택
df[["A", "B"]]

offset index

  • [n:m] : n부터 m-1 까지
  • 인덱스나 컬럼의 이름으로 slice 하는 경우는 끝을 포함.
  • loc (location) : index 이름으로 특정 행, 열을 선택.
  • iloc (inter location) : 컴퓨터가 인식하는 인덱스 값으로 선택
df.loc[:, ["A", "B"]]     # index는 전부, column은 A, B 만 가져오기
df.loc["20210102":"20210104", "A":"D"]   # index는 20210102 ~ 20210104, column은 A ~ D

condition (조건에 따라)

# A 컬럼에서 0보다 큰 숫자(양수)만 선택
df["A"] > 0

# 마스킹: 전체 DataFrame 에서 A column 이 0보다 큰 것
df[df["A"]>0]  

# 전체 data 중 0보다 큰 것
df[df > 0]
  • NaN : Not a Number, 데이터 없음

컬럼 수정

컬럼 추가/수정

df["새로운 column name"] = ["value1", "value1"...]
  • 기존 컬럼이 없으면 추가, 기존 컬럼이 있으면 수정

  • isin(): 특정 요소가 있는지 확인, bool 반환

    df["E"].isin(["two", "five"])
    
    # 마스킹
    df[df["E"].isin(["two", "five"])]

컬럼 제거

  • del, drop
del df["E"]

df.drop(["D"], axis=1) # axis=0 가로, axis=1 세로

apply()

  • df.apply(적용할 함수 이름)
df["A"].apply("sum")   # sum, mean, min, max, np.sum, np.std ... 

0개의 댓글