즐겁게!! 자신있게!! 살아보세!!

재밌는 인생을 위하여! 영촤!

Language_Study/Python

[Python] 8.pandas

Godwony 2021. 1. 19. 21:22
728x90
반응형

pandas

자료구조

  • Series 와 Datafame
  • numpy의 ndarray는 행이나 열을 구분하는 것이 정수로 된 인덱스인데 pandas의 자료구조들은 index를 직접 설정가능

1.Series

1) 생성

Series(data, index=None, dtype=None, copy=False)

  • data는 __iter__ 가 구현된 객체

  • index는 데이터 별 이름을 부여하는 것인데 생략하면 0부터 시작하는 숫자

  • dtype은 각 요소들이 자료형인데 생략하면 유추해서 설정

  • copy는 복제 여부

  • data에 dict를 대입하면 key가 index가 되고 value가 데이터로 설정됩니다.

  • values 속성을 호출하면 데이터만 추출해서 numpyt의 ndarray로 리턴합니다.

  • index 속성을 호출하면 index들을 리턴하는데 직접 설정도 가느

  • 각각의 데이터는 [인덱스]를 이용해서 접근

  • 범위에 해당하느 ㄴ데이터에 접근할 때는 [정수인덱스:정수인덱스]의 경우 정수 인덱스 앞까지이지만 인덱스를 문자열로 생성해서 대입하는 경우 [문자열인덱스:문자열인덱스]는 마지막 문자열인덱스를 포함

[0:4] -> 0부터 3까지
['apple':'mango'] -> apple 부터 mango 까지 
  • 인덱스 자리에 list를 대입해서 list에 포함된 인덱스들의 데이터만 추출가능
from pandas import Series, DataFrame
# Series 와 DataFrame을 제외하고 pd로 접근
import pandas as pd

#Series 만들기
good1 = Series([1000, 1500, 500])
print(good1)

#데이터 접근
print(good1[0]) #1개의 데이터 접근
print(good1[0:2]) #연속된 범위의 데이터 접근
print(good1[[0,2]]) # 불연속된 데이터 접근 

# 인덱스 설정
good1.index = ['orange', 'Apple', 'Banana']
print(good1)
print(good1['orange' : 'Banana'])
#orange 부터 Banana 까지 

2) 연산

  • Series와 Scala Data 의 연산은 Broadcast 연산(각각의 요소와 연산해서 결과를 Series로 리턴)
  • Series 끼리의 연산은 index를 기준으로 연산
    • None(numpy.nan)과의 연산은 결과가 무조건 None
  • 없는 index 와의 연산의 결과도 None
good1 = Series([100, 200, 150], index=['1', '2', '3'])
good2 = Series([10, 20, 15], index=['1', '2', '4'])

print(good1 + 200)  # 모든 요소에 200을 더함
print(good1 + good2)    # 인덱스가 동일한 데이터끼리 연산 
# 인덱스가 동일한 데이터끼리 연산
# 1번과 2번은 양쪽에 같이 있어서 더하기
# 3과 4번은 한쪽에만 존재하기 때문에 None 

2. DataFrame

  • 인덱스와 컬럼이름을 가진 행렬(2차원 배열) - 테이블이라고 많이함.
  • 이름(인덱스)을 갖는다
  • 통계에서 주로 사용
  • dict 의 list와 유사함.
  • 외부 데이터를 가지고 생성하는 경우가 많고 직접 생성하는 경우는 dict를 주로 이용
    • 하나의 key에 list 형태의 value를 설정해서 생성
# 디셔너리를 생성
items = {'name': ['oragne', 'mango'], 'price': [2000, 2500], 'manufacture': ['korea', 'taiwan']}
#DataFrame을 생성
df = DataFrame(items)
print(df)

1) 생성가능한 데이터

  • dict
  • 2차원 ndarray
  • ndarray, list, tuple, dict, Series 타입을 value로 갖는 dict
  • dict, Series의 list
  • list, tuple의 list

2) index

  • 행에 붙이는 이름
  • 직접 설정을 하지 않으면 0부터 시작하는 정수로 된 인덱스가 생성
  • 생성할 때 index 매개변수를 이용해서 직접 설정 가능
  • 생성한 후 index 속성을 이용해서 설정 가능

3) 컬러밍름

  • 열에 붙이는 이름
  • 직접 설정하지 않으면 디폴트로 생성 : dict의 경우는 key가 컬럼이름으로 설정되고 그 이외의 정수로 설정
  • 생성할 때 columns 매개변수를 이용해서 설정 가능
  • 생성한 후 columns 속성을 이용해서 설정 가능

4) 테이블의 데이터 일부 확인

head(데이터 개수) : 앞에서 부터 데이터 개수만큼 리턴

tail(데이터 개수) : 뒤에서 부터 데이터 개수만큼 리턴

5) info()

  • DataFrame의 개요 리턴
  • 외부에서 데이터를 가져와서 DataFrame을 만들 때 head나 tail을 이용해서 데이터가 제대로 불러져 왔는지 확인하고 데이터이ㅡ 개요를 확인하기 위해서 info()를 호출해서 출력
# 디셔너리를 생성
items = {
    'name': ['oragne', 'mango','apple', 'banana'], 
    'price': [2000, 2500, 3000, 1500], 
    'manufacture': ['korea', 'taiwan', 'korea', 'vetnum']
    }
# DataFrame을 생성
df = DataFrame(items)

df.index = np.arange(10, 50, 10) # 인덱스를 직접 설정
print(df.head(3))   # 3개의 데이터 확인 
print(df.info())  # 개요 확인 
  • info 해석
<class 'pandas.core.frame.DataFrame'>        # 전체 데이터의 자료형   
Int64Index: 4 entries, 10 to 40        # 행의 개수와 인덱스 (행의개수와 데이터데개수가 다르면 None이 있다) 
Data columns (total 3 columns):        # 컬럼의 개수   
name           4 non-null object    # name컬럼은 4개의 데이터가 존재, 자료형은 객체(문자열)  
price          4 non-null int64        # price컬럼은 4개의 데이터가 존재, 자료형은 정수   
manufacture    4 non-null object    # manufacture 컬럼은 4개의 데이터가 존재, 자료형은 객체(문자열)  
dtypes: int64(1), object(2)     # 1개의 컬럼은 정수로 되어있고 2개의 컬럼은 객체   
memory usage: 128.0+ bytes        # 메모리 사용량       

6) 패키지에 제공되는 데이터 해석

# sklearn에서 제공하는 boston 주택 가격 데이터 가져오기 
from sklearn import datasets

# boston 데이터 셋을 가져오기 
boston = datasets.load_boston()

# 자료형 확인
print(type(boston))

# 데이터 확인
print(type(boston.keys)) # 키의 자료형 확인 
print(boston.keys())
print(type(boston.data)) # 실제 데이터의 자료형 확인 
# DataFrame으로 생성가능한지 확인 -> shape 확인 (2차원이면됨)
print(boston.data.shape) # 506행 13열 -> 2차원

df = DataFrame(boston.data)
print(df)

# DataFrame 으로 변환 (컬럼입히기)
# 가져온 데이터 셋이 ndarray 인 경우 데이터를 파악하기가 어려울 수있어서
# 컬럼 이름을 부여한 DataFrame으로 가지고 있는것이 데이터 파익이 용이하다.  
# 머신러닝에 적용할 때는 df.values로 다시 ndarray로 만들면 된다.
df = DataFrame(boston.data, 
    columns=['CRIM', 'INDUS', 'NOX', 'RM', 'LSTAT',
            'BLACK', 'PTRATIO', 'ZN', 'CHAS', 'AGE', 
            'RAD', 'DIS', 'TAX'])
print(df)

컬럼출처 : https://datascienceschool.net/view-notebook/4b948c4d99c94213bf02bcff2ced88eb/

7) fwf 파일

  • 텍스트 파일인데 글자 수가 일정한 형태로 되어 있는 파일
  • pandas.read_fwf, pandas.read_txt, pandas.read_csv 등등
# 배치 
pandas.read_fwf(
      파일경로, 
      widths=(글자수 나열), 
      names=(컬럼이름 나열), 
      encoding=인코딩방식)
  • 파일이 windows에서 기본 인코딩으로 만들어진 것이면 cp949(ms949)이고 그 이외의 운영체제에서 만들어진 것이면 utf-8
fwf = pd.read_fwf(
        '../data/data_fwf.txt', 
        width=(10,2,5), 
        names=('날짜', '종목이름', '종가'), 
        encoding='utf-8')
print(fwf)

8) csv파일 읽기

  • read_csv : 기본 구분자가 ,로 설정
  • read_table : 기본 구분자가 Tab
  • 옵션 설정이 없으면 첫번째 행의 데이터가 컬럼이름이 됨니다.
#item.csv 파일을 읽어서 DataFrame 만들기
item = pd.read_csv('../data/item.csv')
print(item.head())
print(item.info())
  • read_csv 의 매개변수
    • path : 파일의 경로
    • sep : 구분자(기본은 , )
    • header : 컬럼이름의 행 번호로 기본값은 0, 첫번째 행이 컬럼이름이 아닌 경우는 None으로 설정
    • index_col : 인덱스로 사용할 컬럼 번호나 컬럼 이름
    • names: 컬럼 이름으로 사용할 리스트로 header=None과 함께 사용
    • skiprows : 읽지 않을 행의 개수
    • nrows : 일부분만 읽는 경우 읽을 행의 개수
    • skip_footer : 마지막에 읽지 않은 행의 개수
    • encoding : 인코딩 종류를 지정 - UTF-8로 인코딩 된 텍스트일 경우 'utf-8'로 지정
    • squeeze : 행이 하나인 경우 Series객체를 만드는데 이 속성의 True로 설정하면 DataFrame으로 생성
    • thousands : 숫자를 천 단위로 끊을 때 ',' 나'.' 같은 구분자, 천단위기호가 있는 데이터를 읽으면 문자열로 읽게 된다.
    • na_values : None 처리할 데이터의 list
    • comment : 주석으로 분류되어 파싱하지 않을 문자 혹은 문자열
    • converters : 변환 시 칼럼에 적용할 함수를 지정
    • parse_dates : 날짜 형식의 데이터를 datetime으로 변환할지 여부

파일을 처음 볼때 천단위기호(문자열인식의문제), 한글 있는지(인코딩의문제) 여부 확인

# good.csv 파일을 읽어서 DataFrame 만들기
good = pd.read_csv(
        '../data/good.csv', 
        header=None, 
        names=['제품명', '수량','가격'])
print(good.head())
print(good.info())
  • 텍스트 파일의 용량이 큰 경우(데이터가 많은 경우)
    • log 분석을 하기 위해서 csv를 읽어오는 경우 실무에서 사용하는 데이터는 아주 큰 용량입니다.
    • 한국 ebay의 경우 하루 로그기록하는 파일의 사이즈가 대략 8GB 정도 됩니다.
    • 이런 정도의 파일을 한 번에 읽어서 DataFrame을 만들게 되면 시스템이 멈추거나 아주 느리게 작업이 이뤄지게 됩니다.
    • 이런 파일은 분할해서 읽어야 한다.
    • nrows와 skiprows를 이용할 수 있다.
    • 읽을 때 chunksize(한 번에 읽을 행이 개수)를 설정 - 이 옵션은 설정하면 TextParser 객체가 리턴
    • TextParser를 iterator(for)를 돌리면 chunksize 단위로 데이터를 가져오게 된다.
# good.csv 파일의 내용을 2개씩 읽어오기 
goodchunk = pd.read_csv(
                '../data/good.csv', 
                chunksize=2, 
                header=None)
for two in goodchunk : 
        print(two)
  • 결과값 - 2줄씩 나눠서 읽는다.
        0   1      2
0   apple  10   1500
1  banana   5  15000
       0   1     2
2  melon   7  1000
3   kiwi  20   500
        0   1     2
4   mango  30  1500
5  orange   4   700
  • 문자열이 작은 따옴표나 큰 따옴표로 묶여 있는 경우 또는 구분자가 1글자가 아니고 여러 글자인 경우 read_csv가 제대로 데이터를 읽지 못하는 경우가 발생할 수 있습니다.
    • csv모듈의 reader 객체를 이용해서 줄 단위로 읽어서 처리를 해야됨니다.
# 문자열이 작은 따옴표로 묶여 있는 경우 
fruits = pd.read_csv(
                '../data/fruit.csv',  
                header=None, 
                sep='|') # sep="|" 구분자를 주고 읽어오기 
print(fruits)

# 줄단위로 읽어서 DataFrame 만들기 (위에방법이 잘안되면)
import csv
lines = list(csv.reader(open('../data/fruit.csv'), delimiter='|'))
print(lines)
fruits = DataFrame(lines, columns=['이름', '수량', '가격'])
print(fruits)

9) csv 저장

  • series 나 DataFrame 객체가 to_csv 함수를 호출
  • 첫번째 매개변수는 파일 경로
  • sep는 저장될 때의 구분자를 설정
  • na_rep는 None 값을 어떻게 출력할 것인지를 설정
  • index = None을 설정하면 인덱스는 출력되지 않음
  • header = None 을 설정하면 컬럼이름이 출력되지 않음
  • cols 에 컬럼이름의 list를 설정하면 설정ㅇ한 컬럼들만 출력
# 파일에 저장
fruits.to_csv(('fruits.csv'), index=None, header=None)

10) excel 파일 읽기

  • anaconda 를 설치하지 않은 경우에는 xlrd 패키지를 설치해야 한다.
  • pandas.read_excel(엑셀파일경로)
  • pandas.io.excel.read_excel(엑셀 파일경로)
    • 함수이름은 같은데 모듈이 다름
  • 함수들의 매개변수는 read_csv 와 유사한데 sheet_name 옵션에 읽을 sheet 이름을 설정해야 한다.

11) excel 파일 저장

  • ExcelWriter 객체를 만들고 DataFrame.to_excel(ExcelWrite객체, sheer_name='시트이름')

실습

  • excel.xlsx 파일 읽기
  • 한글이 포함되어 있고 첫번째 줄이 컬럼의 이름인 것을 확인, sheet이름은 Sheet1, 인코딩을 고려한다.
#엑셀 파일 읽고 쓰기
excel = pd.read_excel('../data/excel.xlsx', sheet_name='Sheet1')
# , encoding='utf-8'
print(excel)
# 엑셀 저장
writer = pd.ExcelWriter('excel2.xlsx')
excel.to_excel(writer, sheet_name='연습')
writer.save()

12) HTML 페이지의 table 태그의 내용을 DataFrame으로 변환

pandas.read_html(경로)

  • 천단위 구분기호 설정, 인코딩 방식, na 데이터 설정 등의 옵션이 있다.
  • 하나의 페이지에 table 태그가 여러개 있을 수 있기 때문에 DataFrame의 list로 리턴

세계인구 https://ko.wikipedia.org/wiki/%EC%9D%B8%EA%B5%AC%EC%88%9C_%EB%82%98%EB%9D%BC_%EB%AA%A9%EB%A1%9D

#pandas 의 read_html 함수 도움말
#help(pd.read_html)

li = pd.read_html('https://ko.wikipedia.org/wiki/%EC%9D%B8%EA%B5%AC%EC%88%9C_%EB%82%98%EB%9D%BC_%EB%AA%A9%EB%A1%9D', thousands=',')
# list가 와서 다른 형태로 써야됨
for df in li : 
        print(df.head())
print(li[0])

13) json 데이터 읽기

  • pandas.read_json을 이용해서 읽기
  • 대다수의 데이터는 배열의 형태가 아니고 일반 객체 형태라서 바로 만들면 나중에 가공작업이 필요한 경우가 많다.

list : 인덱스로 구분 0, 1, 2, 3~
dict : key로 구분

# json 데이터 읽기 
movies = pd.read_json('http://swiftapi.rubypaper.co.kr:2029/hoppin/movies?version=1&page=1&count=20&genreId=&order=releasedateasc')

# key를 확인해서 list를 찾아라! 
print(movies)
print(movies['hoppin'])
print(movies['hoppin']['movies'])
print(movies['hoppin']['movies']['movie'])

for temp in movies['hoppin']['movies']['movie'] : 
        print(temp['title'])

14) xml 읽기

  • pandas에는 xml을 읽어서 만드는 함수는 없습니다.
    • 이 경우에는 xml 파싱을 수행한 후 직접 만들어야 한다.

15) RDBMS 활용

  • 데이터베이스의 데이터를 가지고 DataFrame 만들기

  • sqlalchemy 패키지 : 관계형 데이터베이스에 접속해서 sql을 실행시켜서 데이터를 가져오는 패키지

  • sqlalchemy 패키지를 이용한 데이터베이스 연결 객체 만들기

from sqlalchemy import create_engine
연결객체 = create_engine(데이터베이스 URL)
  • sql을 이용한 DataFrame 만들기
  • pandas.read_sql_query(SQL 구문, 연결객체) : sql 구문 수행 결과를 가져오는 함수
  • pandas.read_sql_table(table 구문, 연결객체) : 테이블의 데이터를 전부 가져오는 함수

16) SQLLite3 의 PL 테이블의 데이터 가져오기

# sqllite3 의 데이터 가져오기
from sqlalchemy import create_engine

# 연결객체생성
con = create_engine('sqlite:///data/sample.db')

#sql을 샐행해서 DataFrame 만들기
pl = pd.read_sql('select * from pl', con)
print(pl)

17) 오라클의 데이터 가져오기

  • cx_Oracle 이라는 패키지가 필요
  • Mac에서는 바로 접근이 안되서 Oracle 홈페이지에서 instant client 라는 프로그램을 다운로드 받아서 설치한 후 /opt 디렉토리에 oracle 디렉토리를 생성하고 받은 파일의 압축을 해제
    • 압축해제한 디렉토리에서 lib 파일들을 /users/local/lib 디렉토리에 복사를 해야 합니다.
  • 접속 URL - oracle://유저ID:유저비밀번호@ip:port/sid

18) mysql 에서 데이터 가져오기

  • pymysql 이라는 패키지가 필요
  • 접속 URL - mysql+mysqldb://유저ID:유저비밀번호@ip:port/dbname

3.DataFrame 에서의 선택

1) 열 선택

  • 하나의 열은 DataFrame[열이름] 또는 Dataframe.열이름 으로 접근 -> Series가 리턴
  • 여러 개의 열은 DataFrame[[열이름 나열]] -> DataFrame 이 리턴
  • DataFrame[열이름:열이름] -> 마지막 열이 포함됩니다. -> DataFrame이 리턴

2) 행 선택

  • iloc[행의 위치]

  • loc[인덱스]

    • list 형태나 :을 이용한 범위형태 가능
    • 하나의 행인 경우는 Series로 리턴되고 2개 이상인 경우는 DataFrame으로 리턴

3) 셀 선택

  • [컬럼이름][행번호]
  • loc[행인덱스, 열인덱스]
  • iloc[행번호, 열번호]
#DataFrame에서의 선택
#item.csv 파일의 데이터 가져오기
#item.csv 파일의 내용을 가져오기
item = pd.read_csv('../data/item.csv')
# 컬럼이름 : code,manufacture,name,price
print(item.head())
item.info()

#인덱스 설정
item.index = ['사과', '수박', '참외', '바나나', '레몬', '망고']

print(item['code'])  # 하나의 열 선택
print(item[['name', 'price']])  # 여러개 열 선택

#행선택
print(item.loc['사과']) # 인덱스로 접근
print(item.iloc[2, 4])     # 행의 위치로 접근

print(item.loc['사과':'망고'])  #인덱스로 접근
print(item.iloc[0:5])   #행의 위치로 접근 

4) boolean indexing

  • loc에 bool 자료형의 Series를 대입하면 True 인 행 만 추출
  • Series는 scala data 와 연산을 하게되면 broadcast 연산을 수행해서 Series로 결과를 리턴
  • Series
#price가 1000 이상인 데이터만 추출
print(item[item['price'] >= 1000])
#price가 1000이나 1500인 데이터
print(item[item['price'].isin([1000,1500])])

4. Data 탐색 관련 함수

1) head

  • 정수를 대입해서 정수만큼 데이터를 앞에서 부터 리턴

2) tail

  • 정수를 대입해서 정수만큼의 데이터를 뒤에서부터 리턴

3) shape

  • 행과 열의 수를 tuple로 리턴

4) info

  • 데이터의 대략적인 개요

5) dtypes

  • 각 컬럼의 자료형을 리턴

6) describe

  • 기술 통계 정보를 리턴하는데 include=True 옵션을 추가하면 숫자가 아닌 컬럼의 정보도 리턴

7) count

  • 데이터 개수

8) value_counts

  • 각 값들의 개수인데 Series에만 사용

9) unique

  • 고유한 값 리턴
#데이터 탐색 함수 
df = pd.read_csv("../data/auto-mpg.csv")
print(df.head())

# 기술통계 정보 
print(df.describe())   # 숫자 데이터의 통계
print(df.describe(include='all')) #문자 포함

# 카테고리 형태의 데이터의 분포 확인
print(df['origin'].value_counts())

5. 기술통계함수

  • count, max, min, mean(평균), median(중간값), var(분산), std(표준편차)
  • skew(비대칭 - 왜도), kurt(첨도), sem(평균의 표준오차), mode(최빈값)
  • argmin, argmax, idxmin, idxmax
  • quantile(4분위수 - 25% 50% 75% 값)
  • describe(요약 정보)
  • cumsum, cumprod, cummax, cummin : 누적
  • diff(앞 데이터와의 차이)
  • pct_change(앞 데이터와의 차이를 백분율로 출력)
  • unique : 고유한 데이터들의 배열 리턴
  • DataFrame 에서 axis 옵션을 0이나 1로 설정하면 행과 열방향 반대
  • skipna 옵션을 True 로 설정하면 None 값을 제외하고 그렇지 않으면 None 값을 포함
#cyl 컬럼의 평균
print(df['cyl'].mean())

stock = pd.DataFrame({'다음':[1000, 1020, 1940]})
print(stock['다음'].diff())   # 각 행의 차이 
print(stock['다음'].pct_change()) # 각행의 차이의 비율

6. 공분산과 상관계수

  • 공분산은 cov()
  • 상관계수는 corr()
  • Series를 이용할 때는 Series 객체가 함수를 호출하고 다른 Series 객체를 매개변수로 대입
  • DataFame은 함수만 호출하면 모든 커럼의 공분산이나 상관계수를 출력

1) 공분산(covaiance)

  • 2개의 확률 변수의 상관정도를 나타내는 수치
  • 분산은 하나의 확률 변수의 이산정도를 나타내는 수치
  • 공분산은 2개의 컬럼 사이의 관계를 파악한 수치
    • 하나의 컬럼의 값이 증가하는 추세를 보일 때 같이 증가하면 양수이고 감소하면 음수가 됩니다.
    • 공분산은 하나의 값이 증가할 때 다른 하나의 값이 얼마나 증가하는지 또는 감소하는지를 수치화

2) 상관계수

  • 공분산과 개념은 같은데 값의 범위를 -1 ~ 1까지로 제한
    • 하나의 컬럼의 값이 증가할 때 동일한 비율로 증가하면 상관계수는 1
    • 하나의 컬럼의 값이 감소할 때 동일한 비율로 증가하면 상관계수는 -1
    • 절대값 0.6 이상이면 상관이 높다라고 하고 0.4 정도 이상이면 상관이 있다라고 하고 0.4이하면 상관이 없다라고 한다.
    • 상관계수가 0인 경우는 상관이 없다라는 것이지 관계가 없다라는 표현은 아니다.
  • 피어슨 상관계수 : 비율을 가지고 구하는 상관계수 - 선형관계인 경우 적합
  • 스피어만 상관계수 : 값의 증가와 감소에만 집중하는 상관계수 - 비선형 관계에 적합
  • 켄달 순위 상관계수 : 순위를 가지고 상관계수를 구함

3) 상관계수 대신 사용하는 것들

  • 산점도나 선 그래프를 그려서 데이터 간의 관계를 파악할 수 있습니다.
#데이터 탐색 함수 
df = pd.read_csv("../data/auto-mpg.csv")
print(df.head())
#weight 와 mpg 의 상관계수 
# 둘다 음수가 나왔고 0.6 이상이므로 음의 상관관계 
print(df['weight'].corr(df['mpg']))
print(df['hp'].corr(df['mpg']))

7. 정렬(sort)

  • sort_index() 를 호출하면 인덱스 순서대로 오름차순 정렬
    • axis = 1을 대입하면 컬럼의 이름 순서대로 오름차순 정렬
    • ascending에서 True를 대입하면 내림차순 정렬
  • Series 객체는 sort_value()를 호출
  • DataFrame에서 특정 컬럼을 가지고 정렬을 하고자 하는 경우에는 sort_values 함수에 by 매개변수로 컬럼의 이름을 list로 대입하면 됩니다.
# Series의 정렬 
print(df['hp'])
print(df['hp'].sort_values()) # 오름차순 정렬
print(df['hp'].sort_values(ascending=False)) # 내림차순 정렬

# DataFrame 정렬
# hp의 오름차순 그리고 값이 같으면 cyl의 오름차순 정렬 
print(df.sort_values(by=['hp','cyl']))

8. rank

  • 순위를 구해주는 함수
  • asending을 False 로 설정하면 내림차순으로 순위를 구함
  • 동점인 경우의 순위는 method를 이용해서 설정할 수 있는데 max를 대입하면 큰 순위로 min을 대입하면 작은 순위로 그리고 first를 설정하면 먼저 등장하나 데이터가 작은순위로 대입
점수      min max first
100   - 1    1 1
90        - 4    4    4
93        - 2    3    2    
93        - 2    3    3
87        - 5    5    5

9. rename

  • 컬럼이나 인덱스의 이름을 변경할 때 사용하는 함수
  • index 나 columns 매개변수에 {기존이름:새로운이름...} 의 형태로 대입하면 index 나 columns를 수정해서 새로운 DataFrame을 리턴
  • inplace = True 옵션을 추가 하면 함수를 호출한 원본 DataFrame을 변경한다. (중요)

10. 인덱스 재구성

  • reindex 속성을 이용해서 인덱스를 재배치 가능
  • set_index('열이름' 또는 열이름의 list) : 열로 index로 생성하는데 열은 데이터에서 제거
  • reset_index() : 인덱스가 제거되고 0부터 시작하는 숫자로 초기화 : 그룹화에서 많이 사용
item = pd.read_csv("../data/item.csv")
print(item)

#순위 출력
print(item.rank())
print(item.rank(method='min'))
print(item['code'].rank(method='min'))

# 컬럼이름 변경
# inplace 옵션을 이용하면 호출한 원본에 적용 가능 
item.rename(columns={'code':'코드'}, inplace=True)
print(item)

#코드를 index로 설정 - 데이터에서는 제거 
item.set_index('코드', inplace = True)
print(item)
728x90
반응형

'Language_Study > Python' 카테고리의 다른 글

[Python] 10-1.데이터전처리  (4) 2021.01.19
[Python] 9.시각화  (0) 2021.01.19
[Python] 7.numpy  (0) 2021.01.19
[Python] 6. parsing  (0) 2021.01.19
[Python] 5.문법-자료형  (0) 2021.01.19