티스토리 뷰

반응형

데이터합치기

 

기존의 데이터

데이터 프레임 3개를 만든다.

df1=pd.DataFrame([['a',1],['b',2]],columns=['letter','number'])
df2=pd.DataFrame([['c',3],['d',4]],columns=['letter','number'])
df3=pd.DataFrame([['e',5,'!'],['f',6,'@']],columns=['letter','number','etc'])

 

 

데이터 프레임 합치기

pd.concat()을 사용하면 데이터프레임을 합칠 수 있다. default값은 열을 기준으로 뭉친다.

 

inner 키워드를 쓰면 중복을 없앤다.

Nan이 사라진 것을 볼 수 있다.

 

그러나 중복 인덱스가 존재하기에 인덱스로 값을 추출하기가 어렵기에 인덱스를 재설정한다.

 

#인덱스 재지정
df_rowconcat=pd.concat([df1,df2,df3],join='inner',ignore_index=True)
df_rowconcat

ignore_index=True

하면 인덱스를 재설정한다.

 

 

행을 기준으로 합치기

#열로 연결하기
df4=pd.DataFrame({'age':[20,21,22]},index=['amy','james','david'])
df5=pd.DataFrame({'phone':['010-111-1111','010-222-2222','010-333-3333']},index=['amy','james','david'])
df6=pd.DataFrame({'job':['student','programmer','ceo','designer']},index=['amy','james','david','J'])

 

axis=1을 설정하면 행기준으로 합칠 수 있다. 

 

inner조인을 하면 같은 갯수만 합친다.

 

#공통된 열 기준으로 연결하기
#pd.merge(left,right,on=기준칼럼,how=연결방법)
#2개의 데이터 프레임을 연결한다.

df=pd.read_csv('scores.csv')
df7=df.loc[[1,2,3]][['name','eng']]
df8=df.loc[[1,2,4]][['name','math']]

 

merge를 통해 공통된 열을 기준으로 합칠 수 있다.

레프트 조인

왼쪽(df7)에 charles, danial, evan을 기준으로

라이트 조인

오른쪽(df8)에 charles, danial, henry을 기준으로

조인한다.

.

 

 

열을 행으로 돌리기

melt 키워드를 쓴다.

 

name을 고정하려면 id_vars를 입력한다. 맨 위를 보면 name이 있다.

 

#컬럼명 변경
#var_name=컬럼명
df.melt(id_vars='name',value_vars=['kor','eng'],var_name='subject',value_name='score')

 

 

행을 열로 돌리기(pivot)

df=pd.read_csv('scores.csv')
df=df.head(2)
df=df.melt(id_vars='name',var_name='subject',value_name='score')

def get_grade(x):
    if x>=90:
        grade='A'
    elif x>=80:
        grade='B'
    elif x>=70:
        grade='C'
    elif x>=60:
        grade='D'
    else:
        grade='F'
    return grade

df['grade']=df['score'].apply(get_grade)
df=df.sort_values('name')
df

 

 

transpose 행을 전치시킨다.

 

 

 

피벗테이블 활용하기

 

현재 데이터

import pandas as pd
df=pd.DataFrame({'item':['shirts','shirts','shirts','shirts','shirts','pants','pants','pants','pants'],
'color':['white','white','white','black','black','white','white','black','black'],
'size':['small','large','large','small','small','large','small','small','large'],
'sale':[1,2,2,3,3,4,5,6,7],
'inventory':[2,4,5,5,6,6,8,9,9]})

df

 

 

df.pivot_table(index=['item','color'],columns='size',values='inventory',aggfunc=sum)

피벗테이블로 인덱스(왼쪽)은 아이템과 색상, 컬럼(맨위)는 사이즈를 하고 각각의 재고를 조회할 수 있다.

 

 

CSV파일을 받아서 분석해보기

df=pd.read_csv('titanic.csv')
df_titanic=df[['Survived','Pclass','Sex','Age','Embarked']]
df_titanic=df_titanic.dropna()
df_titanic.head()

 

원래 데이터

 

생존자별 클래스로 조회하기

 

객실 등급별 생존율

#성별 객실등급별 생존율
df_titanic.pivot_table(index='Sex',columns='Pclass',values='Survived',margins=True)

 

 

 

 

Group by 사용하기

 

데이터준비

df=pd.read_csv('titanic.csv')
df_titanic=df[['Survived','Pclass','Sex','Age','Embarked']]
df_titanic=df_titanic.dropna()
df_titanic.head()

 

칼럼명.groupby(그룹기준칼럼).통계적용칼럼.통계함수

 

#df.groupby(그룹기준칼럼).통계적용칼럼.통계함수
#객실등급(pclass)별 승선자 수를 구한 결과
df1=df.groupby('Pclass').Survived.count().to_frame()
df1

 

#객실등급별 생존자 수를 구한결과
df2=df.groupby('Pclass').Survived.sum().to_frame()
df2
#객실등급별 생존율 구한 결과
df3=df.groupby('Pclass').Survived.mean().to_frame()
df3

 

여러 칼럼을 동시에 추출하기

#객실등급별 탑승자수, 생존자수, 생존율 구하기
df4=pd.concat([df1,df2,df3],axis=1)
df4.columns=['승선자수','생선자수','생존율']
df4

columns로 인덱스를 설정한다.

 

 

df5=df.groupby('Sex').Survived.count().to_frame()
df5
df6=df.groupby('Sex').Survived.sum().to_frame()
df6
df7=df.groupby('Sex').Survived.mean().to_frame()
df7

 

 

사용자 정의 함수를 적용하기

#그룹에 사용자 정의 함수 정의하기
#df.groupby(그룹기준칼럼).통계적용컬럼.agg(사용자정의함수,매개변수)

def my_mean(values):
    return sum(values)/len(values)

df.groupby(['Sex','Pclass']).Survived.agg(my_mean)

맨 뒤에 agg(함수, 매개변수)를 입력하면 된다.

 

 

그룹오브젝트 출력하기

#그룹 오브젝트 출력하기
df20=df[:20]
df20.head()

 

 

#그룹별 출력(1등석)
df20.groupby('Pclass').get_group(1)

 

get_group()을 사용하면 값을 출력한다. 1은 1등석을 의미한다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함
반응형