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 속성으로 지정한다.
// 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
df1.T
// 행과 열이 바뀐다!
values : 값, 데이터 확인
열 값이 출력된다. Numpy배열 형
index : 인덱스 확인
인덱스 값 출력
columns : 컬럼확인
컬럼명 출력
df1['컬럼명']
// 인덱싱은 열(컬럼명)으로만 가능하다.
// Series형태로 출력되며, DataFrame 형태로 보고 싶다면 2차원 배열로 설정
df1[['컬럼명']]
// 2010년 데이터 중에서 250만 이상인 데이터 출력하기
df3['2010'][df3['2010'] >= 2500000]
DataFrame에서 행과 열 단위로 인덱싱, 슬라이싱 하고 싶을 때 활용
기호 ,를 기준으로 앞쪽은 행, 뒤쪽은 열을 작성한다.
범위 지정(슬라이싱)할 때는 기호 : 사용
// df1.loc['인덱스 명' , '컬럼 명']
df1.loc['부산':'인천' , '2020':'2010']
loc와 동일하게 사용하나, int형으로 작성한다.
// df1.iloc[인덱스 번호 , 컬럼 번호]
df1.iloc[1 , 3]
// 기본값으로 오름차순 정렬이며 내림차순 정렬 시에는 ascending 속성 값을 False로 전환
pop.sort_index()
pop.sort_index(ascending=False)
// 기본값으로 오름차순 정렬이며 내림차순 정렬 시에는 ascending 속성 값을 False로 전환
pop['2010'].sort_values()
pop['2010'].sort_values(ascending=False)
pop.sort_values(by = '2010')
// by속성에 리스트 자료형을 대입하면 여러 컬럼값으로 정렬할 수 있다.
sum()
합계를 구하는 함수
mean()
평균을 구하는 함수
// DF명.sum()
// DF명.mean()
pop.sum()
pop.mean()
pop.sum(axis=1)
pop.mean(axis=1)
// 기본값으로 모든 행 합산(세로합산)이며, axis 속성을 이용해 모든 열 합산(가로합산) 할 수 있다.
// DF명.loc['추가할 행 이름'] = '추가할 값'
DF명['컬럼명'] = '추가할 값'
DF명['행 이름','열 이름'] = '추가할 값'
// 컬럼명 변경
// rename(columns = {'수정될 데이터':'수정할 데이터'})
df.rename(columns = {'2010':'2020'}, inplace=True)
// 인덱스명 변경
// rename(index = {'수정될 데이터':'수정할 데이터'})
df.rename(index = {'광주':'대전'}, inplace=True)
DF명['행 이름','열 이름'] = '추가할 값'
// df명.drop('삭제할 인덱스명')
df = df.drop('부산')
// 인덱스 번호로 삭제하기
df.drop(df.index[0])
// 컬럼명으로 삭제하기
df.drop('2005', axis=1)
두 개의 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')
이름 나이 성별 영화 평점
0 홍길동 23 남 터미네이터 5
1 홍길동 23 남 비긴어게인 2
2 홍길동 23 남 살인의추억 4
3 신사임당 48 여 비긴어게인 5
이름 나이 성별 영화 평점
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
두 개의 DataFrame을 합칠 때 축의 방향을 기준으로 합치는 함수
행 방향으로 병합 : axis = 0 (기본값)
열 방향으로 병합 : axis = 1
pd.concat([df1,df2,df3], axis=1)