Python Pandas DataFrame

HGY·2023년 6월 20일
0

Python

목록 보기
10/13

DataFrame

DataFrame은 행과 열로 구성되어있는 2차원 데이터 구조(엑셀표)
1차원 Series 데이터들이 모여 2차원이 된 형태

  • 딕셔너리로 생성
data = {'2015':[9904312, 3448737, 2890451, 2446052],
        '2010':[9631482, 3393191, 2632035, 2431774]}
        
// Key : 컬럼명(열이름)
// Value : value(데이터)
// 인덱스는 자동으로 지정된다

df = pd.DataFrame(data, index=['서울','부산','인천','광주'])

// data로 생성하고, 인덱스(행)명은 index 속성으로 지정한다.
  • List로 생성
    데이터 프레임에 들어가는 모든 값들을 일일이 지정해줘야함(value/데이터, 인덱스, 컬럼명)
// value가 될 2차원 리스트 생성
data1 = [[9668465,3391946,2942828,1450062],
[10312545,3567910,2758296,1454636]]

// index가 될 리스트 생성 (1차원)
ind = ['2020','2010']

// 컬럼명(열이름)이 될 리스트 생성
col = ['서울','부산','인천','광주']

// index, columns 속성으로 값 지정
df1 = pd.DataFrame(data1, index =ind, columns=col)
df1
  • 행, 열 위치 교환 : .T
df1.T

// 행과 열이 바뀐다!

DataFrame 구조 확인

  • values : 값, 데이터 확인
    열 값이 출력된다. Numpy배열 형

  • index : 인덱스 확인
    인덱스 값 출력

  • columns : 컬럼확인
    컬럼명 출력

인덱싱, 슬라이싱

  • 인덱싱
df1['컬럼명']

// 인덱싱은 열(컬럼명)으로만 가능하다.
// Series형태로 출력되며, DataFrame 형태로 보고 싶다면 2차원 배열로 설정

df1[['컬럼명']]
  • boolean 인덱싱
    Numpy배열과 동일하게 사용한다.
// 2010년 데이터 중에서 250만 이상인 데이터 출력하기

df3['2010'][df3['2010'] >= 2500000]

인덱서

DataFrame에서 행과 열 단위로 인덱싱, 슬라이싱 하고 싶을 때 활용

loc

기호 ,를 기준으로 앞쪽은 행, 뒤쪽은 열을 작성한다.
범위 지정(슬라이싱)할 때는 기호 : 사용

// df1.loc['인덱스 명' , '컬럼 명']

df1.loc['부산':'인천' , '2020':'2010']

iloc

loc와 동일하게 사용하나, int형으로 작성한다.

// df1.iloc[인덱스 번호 , 컬럼 번호]

df1.iloc[1 , 3]

DataFrame 정렬

  • .sort_index()
    인덱스를 기준으로 정렬
// 기본값으로 오름차순 정렬이며 내림차순 정렬 시에는 ascending 속성 값을 False로 전환

pop.sort_index()
pop.sort_index(ascending=False)
  • .sort_values()
    데이터 값을 기준으로 정렬
    기준이 되는 데이터를 지정해야 한다.
// 기본값으로 오름차순 정렬이며 내림차순 정렬 시에는 ascending 속성 값을 False로 전환

pop['2010'].sort_values()
pop['2010'].sort_values(ascending=False)
  • 전체 데이터에서 특정 값을 기준으로 정렬
    by속성으로 기준 값을 정해준다
pop.sort_values(by = '2010')

// by속성에 리스트 자료형을 대입하면 여러 컬럼값으로 정렬할 수 있다.

DataFrame 연산

  • sum()
    합계를 구하는 함수

  • mean()
    평균을 구하는 함수

// DF명.sum()
// DF명.mean()

pop.sum()
pop.mean()

pop.sum(axis=1)
pop.mean(axis=1)

// 기본값으로 모든 행 합산(세로합산)이며, axis 속성을 이용해 모든 열 합산(가로합산) 할 수 있다.

DataFrame 추가, 수정, 삭제

추가

  • 행 추가하기
// DF명.loc['추가할 행 이름'] = '추가할 값'
  • 열 추가하기
DF명['컬럼명'] = '추가할 값'
  • 값 추가하기
    수정과 같은 방식으로 사용한다
DF명['행 이름','열 이름'] = '추가할 값'

수정

  • rename()
    컬럼명 변경하는 함수
    인덱스명을 변경하고 싶을 땐 index속성을 활용한다.
    딕셔너리 자료형으로 작성
    rename()함수는 데이터에 즉시 반영되지 않기 때문에 변수에 다시 대입하거나,
    inplace속성을 True로 변경해야 한다.
// 컬럼명 변경
// rename(columns = {'수정될 데이터':'수정할 데이터'})

df.rename(columns = {'2010':'2020'}, inplace=True)

// 인덱스명 변경
// rename(index = {'수정될 데이터':'수정할 데이터'})

df.rename(index = {'광주':'대전'}, inplace=True)
  • 값 수정하기
    추가와 같은 방식으로 사용한다
DF명['행 이름','열 이름'] = '추가할 값'

삭제

  • drop()
    rename()과 마찬가지로 삭제한 결과를 변수에 다시 대입(갱신) 해주어야 한다.
    axis속성으로 행, 열을 지정 할 수 있다.
// df명.drop('삭제할 인덱스명')

df = df.drop('부산')

// 인덱스 번호로 삭제하기

df.drop(df.index[0])

// 컬럼명으로 삭제하기
df.drop('2005', axis=1)

DataFrame 병합

merge()

두 개의 DataFrame을 합칠 때 '특정 컬럼'을 기준으로 합치는 함수
merge(L테이블,R테이블, on='기준컬럼명', how='병합방식')

// 사람의 정보 데이터
data1 = {
    '이름' : ['홍길동','이순신','신사임당'],
    '나이' : ['23','55','48'],
    '성별' : ['남','남','여']
}
// 영화를 보고 매긴 평점 정보 데이터
data2 = {
    '이름' : ['홍길동','홍길동','홍길동','신사임당','장보고'],
    '영화' : ['터미네이터','비긴어게인','살인의추억','비긴어게인','살인의추억'],
    '평점' : ['5','2','4','5','3']
}

h_info = pd.DataFrame(data1)
r_info = pd.DataFrame(data2)
// merge(L테이블,R테이블, on='기준컬럼명', how='병합방식')
pd.merge(h_info, r_info, on='이름', how='inner')
  • inner
    두 데이터에서 겹치는 부분만 출력
	이름	나이	성별	영화	평점
0	홍길동	23	남	터미네이터	5
1	홍길동	23	남	비긴어게인	2
2	홍길동	23	남	살인의추억	4
3	신사임당	48	여	비긴어게인	5
  • left
    두 데이터에서 겹치는 부분과 L테이블 데이터 출력
	이름	나이	성별	영화	평점
0	홍길동	23	남	터미네이터	5
1	홍길동	23	남	비긴어게인	2
2	홍길동	23	남	살인의추억	4
3	이순신	55	남	NaN	NaN
4	신사임당	48	여	비긴어게인	5
  • right
    두 데이터에서 겹치는 부분과 R테이블 데이터 출력

  • outer
    모든 데이터 출력

이름	나이	성별	영화	평점
0	홍길동	23	남	터미네이터	5
1	홍길동	23	남	비긴어게인	2
2	홍길동	23	남	살인의추억	4
3	이순신	55	남	NaN	NaN
4	신사임당	48	여	비긴어게인	5
5	장보고	NaN	NaN	살인의추억	3

concat()

두 개의 DataFrame을 합칠 때 축의 방향을 기준으로 합치는 함수
행 방향으로 병합 : axis = 0 (기본값)
열 방향으로 병합 : axis = 1

pd.concat([df1,df2,df3], axis=1)
profile
바보 개발자 지망생

0개의 댓글

관련 채용 정보