파이썬 판다스 데이터프레임 합치기, pd.concat(), 열 합치기, 행 합치기, python pandas library cheet sheet

 

 

데이터 프레임을 생성했는데 행으로 합치는 법과 열로 합치는 법을 살펴보겠습니다.

우선 데이터프레임을 하나 만들어보죠.

column = ['이름', '나이', '사는곳']

# df1 데이터프레임 생성
df1 = pd.DataFrame([
    ['김길동', 18, '서울'],
    ['안홍조', 28, '경기'],
    ['강국지', 30, '부산']
], columns=column)

# df2 데이터프레임 생성
df2 = pd.DataFrame([
    ['홍연', 21, '강원'],
    ['이박사', 44, '경기'],
    ['공석사', 34, '충북']
], columns=column)

df1, df2

이 데이터프레임들을 하나의 데이터프레임으로 합쳐보겠습니다.

위아래로 붙여야 말이 되겠죠? 양옆으로 붙이면 이상한 데이터프레임이 되겠죠?

df3 = pd.concat([df1, df2])
df3.head()

 

concat 결과

그러나 무언가 이상합니다. 발견했나요?

행 인덱스가 중복되지요.

이렇게 되면 나중에 참조할때 상당한 문제가 생깁니다. 

2가지 방법이 있습니다. 

가장 간단한 방법은 pd.concat()의 파라미터로 ignore_index = True를 설정해주는 겁니다.

df3 = pd.concat([df1, df2], ignore_index=True)
df3.head()

 

다른 방법으로는 인덱스를 리셋해줘야 합니다.

df3.reset_index()

reset_index()의 특성상 기존의 인덱스는 feature로 생성되고 새로운 인덱스가 sort되서 할당이 됩니다.

그러나 이대로 두면 기존 데이터프레임에 적용되지 않습니다.

inplace = True 파라미터를 반환하거나, 새롭게 df3에 할당시켜줘야 합니다.

df3 = df3.reset_index()
# df3 = df3.reset_index().copy() 를 권장합니다.
# 혹은 df3.reset_index(inplace=True)

# df3.drop('index', axis=1, inplace=True)

# 인덱스를 또 드랍하는것이 번거로우니, 
df3.reset_index(drop=True)
#를 추천드립니다.

df3의 최종 결과물

간단한 방법과, 조금 복잡한 방법으로 나눠서 인덱스 설정을 살펴봤습니다.

결국 우리가 원하던대로 기존의 열에 새로운 행 데이터셋을 합치는 결과물이 완성되었습니다.

 

자 그러면, 반대의 경우도 생각해봐야겠죠? 동일한 열에서의 추가를 봤으니 그 다음은?

고정된 행에서, 오른쪽으로 붙여나가는 열의 데이터(피처 데이터)를 추가하는 겁니다.

기존의 데이터셋 df1을 다시 생성해보죠.

df1 = pd.DataFrame([
    ['김길동', 18, '서울'],
    ['안홍조', 28, '경기'],
    ['강국지', 30, '부산']
])

자 이제 3명의 가상인물의 추가적인 정보를 만든 데이터프레임과 합쳐보겠습니다.

이는 df2로 생성합니다.

df2_column = ['직업', '종교', '특이사항']
df2 = pd.DataFrame([
    ['의적', '불교', '홍길동아님'],
    ['피부과의사', '천주교', '얼굴홍조없음'],
    ['요리사', '기독교', '']
], columns=df2_column)

df2

자 이제 df1과 df2를 합쳐보겠습니다. axis=0(행)이 아닌, axis=1(열)끼리 붙여야겠죠?

df3 = pd.concat([df1, df2], axis=1)

df3

오늘의 코드는 여기까지입니다.

 

위의 개인정보는 임의로 정한 가상의 인물이며 특정인을 지칭하지 않는다는 점 알립니다.

감사합니다.

1. Python

목표: 코드잇을 통해 최대한 할 수 있는 강의를 방학동안 다 들어놓기

 

과정:

코드잇 수강이력

약 174시간동안 많은 강의를 들었다.

가장 기억에 남는 것은 파이썬프로그래밍(기초) 부분이다.

기초라고 써놨지만 사실 이정도면 데이터사이언스 하는데에 전혀 지장이 없을 정도다. 

내용이 엄청 중급 고급지다고 할 순 없지만, 그럭저럭 충분하다고 본다.

그리고 데이터사이언스 수업이 있는데 지금 보니까 너무너무너무너무 기초틱한 내용들만 있다.

아니나 다를까 올해 머신러닝, 딥러닝 강의들도 출시예정이라고 하니 

책과 다른 온라인 강의를 통해서 더욱 숙련도를 높이자.

 

2. R

목표: 강의를 추가적으로 결제하지 말고 ADsP를 통해서 기본문법 익혀놓기

 

과정: 파이썬 하기도 벅차다. R보다 차라리 자바를 하는게 어떤가? 혹은 그 시간에 리눅스를 배우는게?

R이 확실히 통계적인 기능이나 시각화가 더 좋다. 시각화 특히 이쁘다는 것을 느낌.

그러나 파이썬 라이브러리도 이에 못지않는 기능들이 있다. R에서 나온거긴 하지만,,,,

그래서 R을 할빠에는 파이썬에 더 집중하자.

기초적인 문법을 배우는게 낫지 않을까 생각했지만 그건 크게 의미있다고 보지 않는다고 생각하여 손절.

 

3. ADsP

목표: 3월 중순에 있는 시험에 대비해서 개강하고 조급하게 준비하지 않게 미리 익혀두기

 

과정: 코로나의 덕(?)분에 2월29일 시험이 5일전엔가 4월달로 연기되었다고 공지가 나왔다.

심지어 3월 중순쯤에 다시 시험이 6월 7일로 연기되었다고.

그래서 지금 조금 놓은 상태이다. 5월초부터 다시 준비를 해야지.

나는 익숙치 않은 개념이다보니 새롭고 어려웠는데 기존에 분석하던 분들은 상당히 쉬운 난이도라고....

지금 보니 어려운 개념은 아닌것 같다는게 내뇌계의정설.

근데 웃긴건 ADP 난이도는 극악 난이도라고,,, 현업자들도 합격률3%랬나...?

 

4. SQLD

목표: 3월 중순에 있는 시험에 대비, 19년 2학기 데베 수업의 연장선이라고 생각하고 추가적인 학습하기

 

과정: 파이썬 데이터사이언스 관련된 공부하다가 SQLD를 자꾸 미루게 되었다. 심지어 공부놓은지 6개월 다되가는 듯..

그리고 이거 조금 내 합리화지만, SQLD 자격증이 기업에서 크게 영향력 있지 않다. 

자격증 몇개보다 프로젝트 경험이 더 유의미할 것 같아서 중요한 것에 집중하기로 하였다.

 

5. 사회조사분석사2급

목표: 19년 1,2학기에 있던 SPSS수업의 연장선이라 생각하고 학습

 

과정: SQLD과 동일한 이유로 손절중.

 

6. 영어

목표: 회화위주이되 데이터분석을 위한 기초적인 독해능력 숙지

회화는 유튜브를 활용한 쉐도잉 훈련법,

독해는 차후 생각해야 될 것 같음.

 

과정: 올초에 잠시 영어에 미친적이 있었다. 미친다고 한꺼번에 늘지 않는다는걸 자각하고 지금은 조금 안정된 상태

그 덕인지 영어와 조금 친숙해졌다고 생각됨. 회화보다는 독해가 많이 늘었고, 번역기를 자주 돌리는 일도 줄었다. 

확실히 영어도 운동과 마찬가지로 꾸준한게 중요하고 주변 환경을 최대한 영어로 바꾸는 것이 중요한듯.

 

7. 수학 및 통계 및 인공지능

목표: 선형회귀, 랜덤포레스트를 기초적으로 알 필요성.

미적분 학습 필요성(중요) - 20년 1학기 수강예정

선형대수학은 간단하게만.

중급통계학은?

 

과정: 학교 수업의 미적분, 선형대수학은 확실히 학문을 논하는 느낌. 

차라리 인공지능 수업을 통해서 관련된 수학개념만 익히는것이 훨씬 더 효율적이라고 판단.

선형대수학 과목만 수강하고 미적분 과목은 수강하지 않음.

계량경제학을 통해 데이터 분석하는 과목도 진행중. 

유의미한 프로젝트 결과가 나왔으면 좋겠다.

 

8. IBM DataScience

목표: 이거 과연 할 수 있을지 의문인데

우선 시작하고 무료체험기간동안 학습하고 판단하기

 

과정: 몇 강이라도 들어볼걸 하는 생각이 들지만,

그때 들어봐야 낯선 내용들 천지여서, 조금 더 내가 훈련한 뒤에 익숙한것들이 보일때쯤 듣는게 더 효과적이라고 판단.

 

9. 캐글 및 데이터브릭을 활용

목표: 슬슬 포트폴리올르 구상해야된다. 일단 위의 기초적인 부분을 학습 한 뒤에

이를 관리해주는 정보들을 찾아서 구상

 

과정: 캐글에 있는 데이터 컴피티션을 통해 좋은 코드들을 필사하면서 공부하였음.

굉장히 많은 도움이 되었지만 문제는 나 혼자 구상하지 못한다는 점이다.

2분기까지 데이터탐색 및 시각화 그리고 전처리까지 스스로 어느정도 하는 수준까지 만들고 싶다.

모델링이나 알고리즘은 깊은 수준까지 이해하고 있지는 않은 상태.

다만 어떤 모델이 어떤 개념인지 정도는 알고 있다. 

 

10. 네이버블로그 및 티스토리 활용

목표: 체계적으로 관리할 필요성이 있음.

위의 내용들을 시작하기 전에 이것부터 해야된다

 

과정: 1분기 끝나갈 때 이제야 조금 눈을 뜸

소통을 위해 네이버블로그를 선택해볼까 했지만,

둘을 이원화시켜서 개인적인 블로깅은 네이버에 하고,

공부나 자기계발에 관련된 내용은 티스토리에 하는 것이 더 낫다고 판단.

 

+ Recent posts