티스토리 뷰

python

[python, DataFrame] DataFrame

코딩계란 2024. 2. 15. 09:17
728x90

이전 글 참조

 

[python, DataFrame]Mysql의 데이터로 Data Frame 형성

패키지(터미널에서 설치) pip install sqlalchemy pip install pymysql 데이터 베이스 접속 from sqlalchemy import create_engine database_connection = create_engine('데이터 베이스 접속 url') 데이터 베이스 접속 url은 데이터

growingegg.tistory.com

 

DataFrame 이름 변경

rename

  • 인덱스 나 컬럼의 이름을 변경하고자 할 때 사용
  • index 옵션에 디셔너리 형태로 {기존 인덱스: 새로운 인덱스,....} 설정하면 인덱스가 변경
  • index의 변경은 메서드를 이용하지 않고 index 옵션에 list 나 Series 형태로 설정해도 가능
  • columns 옵션에 디셔너리 형태로 {기존 컬럼 이름: 새로운 컬럼 이름,....} 설정하면 컬럼 이름이 변경
  • inplace 옵션의 기본값은 False 인데 False 가 설정되면 복제본을 만들어서 리턴하고 True를 설정하면 원본이 변경
  • rename 함수는 첫번째 매개변수로 변환 함수를 대입하고 두번째 옵션에 axis 에 index 나 columns를 설정해서 변환 함수를 이용해서 변경하는 것도 가능

실습

import pandas as pd

#item.csv의 파일 데이터를 가져와서 DataFrame 만들기
item = pd.read_csv("Downloads\data\data\item.csv")
print(item)

names = {"code":"코드", "manufacture": "원산지", "name":"이름", "price": "가격"}
#numpy나 pandas의 대다수 메서드는 원본을 변경하지 않고 수정해서 리턴 
#pandas의 DataFrame에서는 inplace 옵션이 있는 경우 이 옵션에 True를 설정하면 원본을 수정 
item.rename(columns=names, inplace=True)

print(item)
#결과
	code  manufacture            name  price
0     1        korea           apple   1500
1     2        korea      watermelon  15000
2     3        korea  oriental melon   1000
3     4  philippines          banana    500
4     5        korea           lemon   1500
5     6        korea           mango    700
   코드          원산지              이름     가격
0   1        korea           apple   1500
1   2        korea      watermelon  15000
2   3        korea  oriental melon   1000
3   4  philippines          banana    500
4   5        korea           lemon   1500
5   6        korea           mango    700

 

인덱스 재구성

인덱스

  • 행을 구별하기 위한 이름 
  • 데이터를 생성할 때 의미있는 이름을 인덱스로 설정하는 것을 권장
  • 인덱스로 설정할 때 관계형 데이터베이스에서의 기본키처럼 데이터를 구별할 수 있는 값을 설정하는 것을 권장
  • 인뎅스를 별도로 설정하지 않으면 일련번호의 형태로 부여 
  • 데이터 프레임을 생성할 때 index 옵션을 이용해서 지정이 가능 
  • reindex 속성을 이용해서 index를 재배치, 추가, 삭제가 가능
  • set_index(열이름이나 열 이름 나열 ): 컬럼을 인덱스로 사용가능. 이때 해당 속성이 컬럼에서 제거된다.
  • reset_index()를 호출하면 기본 인덱스가 제거되고 0부터 시작하는 일련번호로 다시 부여. 피벗의 형태를 만들거나 할 때 많이 이용
  • index 속성을 이용해서 직접 지정하는 것 도 가능

 

 

데이터 삭제

Drop 메서드 

  • 행이나 열을 삭제하고자 하는 경우에 사용하는 메서드 
  • 인덱스나 컬럼이름을 하나 또는 list 형태로 대입하면 되는 데 axis 옵션에 0을 설정하면 행이 제거되고 1을 설정하면 열을 제거
  • inplace 옵션이 존재 
  • 컬럼을 제거할 때 del DataFrame이름['컬럼 이름']으로도 제거 가능하지만 선호되지 않는다. 
print(item)

#2행 삭제 
print(item.drop([1], axis = 0))

#code 열 삭제
print(item.drop(['코드'], axis = 1))
#기본 테이블 
   코드          원산지              이름     가격
0   1        korea           apple   1500
1   2        korea      watermelon  15000
2   3        korea  oriental melon   1000
3   4  philippines          banana    500
4   5        korea           lemon   1500
5   6        korea           mango    700

#2행 삭제
   코드          원산지              이름    가격
0   1        korea           apple  1500
2   3        korea  oriental melon  1000
3   4  philippines          banana   500
4   5        korea           lemon  1500
5   6        korea           mango   700

# 코드 열 삭제
           원산지              이름     가격
0        korea           apple   1500
1        korea      watermelon  15000
2        korea  oriental melon   1000
3  philippines          banana    500
4        korea           lemon   1500
5        korea           mango    700

 

데이터 수정 및 추가 

  • 컬럼 이름이나 인덱스는 유일해야 한다. 
  • DataFrame은 Dict처럼 동작
  • DataFrame[컬럼 이름] = 데이터: 컬럼 수정 및 추가 
  • 하나의 값 또는 vector 데이터(list, ndarray, Series, dict)를 대입할 수 있다. 
  • DataFrame.loc[인덱스 이름] = 데이터: 행을 수정 및 추가. 인덱스 이름이 존재하지 않으면 추가. 존재하면 수정. 
item = pd.read_csv("Downloads\data\data\item.csv")
print(item)

#컬럼 추가  
item['description'] = '과일'
print(item)

#컬럼 수정 
item['description'] = ['사과', '수박', '참외', '바나나', '레몬', '망고']
print(item)

#행 추가 
item.loc[6] = [7, '한국', '무화과', 3000,'무화과']
print(item)
# 결과
   code  manufacture            name  price
0     1        korea           apple   1500
1     2        korea      watermelon  15000
2     3        korea  oriental melon   1000
3     4  philippines          banana    500
4     5        korea           lemon   1500
5     6        korea           mango    700

#컬럼 추가
   code  manufacture            name  price description
0     1        korea           apple   1500          과일
1     2        korea      watermelon  15000          과일
2     3        korea  oriental melon   1000          과일
3     4  philippines          banana    500          과일
4     5        korea           lemon   1500          과일
5     6        korea           mango    700          과일

#컬럼 수정
   code  manufacture            name  price description
0     1        korea           apple   1500          사과
1     2        korea      watermelon  15000          수박
2     3        korea  oriental melon   1000          참외
3     4  philippines          banana    500         바나나
4     5        korea           lemon   1500          레몬
5     6        korea           mango    700          망고

#행 추가
   code  manufacture            name  price description
0     1        korea           apple   1500          사과
1     2        korea      watermelon  15000          수박
2     3        korea  oriental melon   1000          참외
3     4  philippines          banana    500         바나나
4     5        korea           lemon   1500          레몬
5     6        korea           mango    700          망고
6     7           한국             무화과   3000         무화과
​

 

연산

전치 연산 

  • 행과 열을 바꾸는 연산
  • T라는 속성을 이용할 수 있는 transpose라는 메서드를 이용할 수 있다. 
  • 데이터를 읽어왔을 때 방향이 맞지 않는 경우 사용

산술연산

  • numpy와 동일한 방식으로 연산을 수행
  • numpy는 위치 기반 연산 진행. Series나 DataFrame은 인덱스 기반 연산을 수행.
  • 한 쪽에만 존재하는 인덱스의 경우 NaN으로 결과를 출력
  • 산술 연산자를 사용하거나 add, sub, div, mul 메서드를 사용할 수 있다. 메서드를 사용하면 fill_method  나중에 추가
item1 = {
    "1": {"price": 1000},
    "2": {"price": 2000}
}

item2 = {
    "1": {"price": 1000},
    "3": {"price": 3000}
}

#데이터 원본
print(item1)
print(item2)

#전치
df1 = pd.DataFrame(item1).T
df2 = pd.DataFrame(item2).T

print(df1)
print(df2)

#산술 연산
print(df1 + df2)
{'1': {'price': 1000}, '2': {'price': 2000}}
{'1': {'price': 1000}, '3': {'price': 3000}}
   price
1   1000
2   2000
   price
1   1000
3   3000

# 산술 연산
    price
1  2000.0
2     NaN
3     NaN

 

기본 통계 함수

  • count, min, max, sum, mean, median, mode(최빈값)
  • var, std, kurt, skew, sem:  분산, 표준 편차, 첨도, 왜도, 평균의 표준 오차 
  • argmin, argmax, idxmin, idxmax
  • quantile: 4분위수
  • describe: 기술 통계 정보 요약
  • cumsum, cummin, cummax, cumprod: 누적합, 누적 최소, 누적 최대, 누적 곱
  • diff: 산술적인 차이
  • pct_change: 이전 데이터와의 백분율
  • unique(): Series에서만 사용 가능. 동일한 값을 제외한 데이터의 배열을 리턴. skipna 옵션을 통해 NaN 값을 제거할 수 있다. 

상관 관계 파악

  • 상관 관계: 2개의 데이터가 얼마나 상호 의존적인지를 나타내는 것. 한 개 데이터 값의 변화가 다른 데이터 값의 변화에 미치는 영향을 나타낸다. 
  • conv(): 공분산. 거리의 제곱 
  • corr(): 상관 계수. 공분산과 데이터 스케일을 맞추지 않고 모든 값이 동일한 스케일을 갖도록 값을 수정한다. -1 ~ 1이 되도록 수정. 절대값 1에 가까워지면 상관 관계가 높다고 하고 0에 가까워질수록 상관 관계가 낮다.  상관 계수가 데이터의 관계 전부를 표현하지는 않는다. 

정렬

  • sort_index(): 인덱스를 기준으로 정렬. 오름차순이 기본. 내림차순으로 정렬할 경우 ascending = False 설정을 하면 된다. 
  • sort_values(by=열 이름 또는 열 이름의 list, ascending=bool 또는 bool의 list): 컬럼의 값을 기준으로 정렬

 

순위

  • rank 함수 사용 
  • 기본적으로 오름차순으로 순위 설정
  • ascending = False로 내림차순
  • axis를 이용해서 행이나 열 단위 설정
  • 동일한 점수가 있는 경우 순위의 평균을 리턴. method 옵션에 max, min, first를 설정해서 동일한 점수를 처리하는 것이 가능
  • 순위는 컬럼 단위로 연산을 수행 

 

 

 

 

 

728x90