본문 바로가기
파이썬/파이썬 데이터프레임

파이썬 (Python) 데이터프레임 기초 강좌#2 - 행과 열, 데이터 추가하는 방법

by 이박수 2024. 9. 8.

파이썬 (Python) 데이터프레임 특집 2 시작해보겠다. 지난시간에는 엑셀파일을 데이터프레임을 변환시켜보고, 다시 엑셀파일로 저장해보았다.

기억이 안나면 다시 보길 바란다.

2024.09.05 - [파이썬/파이썬 데이터프레임] - 파이썬 (Python) 데이터프레임 특집 #1 -엑셀 파일 읽기

 

파이썬 (Python) 데이터프레임 특집 #1 -엑셀 파일 읽기

목차파이썬(Python) 데이터프레임과 판다스(Pandas), 엑셀파이썬(Python) 판다스(Pandas) , openpyxl 설치파이썬(Python)으로 엑셀 제어하기파이썬(Python) 판다스(Panda) 예제 및 실습 파이썬(Python) 데이터프레

flex-link.co.kr

 

오늘은 이렇게 만든 데이터프레임에 행과 열을 추가하고, 값을 넣는 방법에 대하여 알아보겠다.

 

파이썬 (Python) 데이터프레임 행과 열, 데이터 추가하기

지난번 엑셀 파일을 열어보자.

아직 엑셀파일이 없다면 여기서 다운받아라.

http://naver.me/5uIInXg4

엑셀파일을 열어보면 아래와 같이 생겼다.

 

그리고 판다스를 통하여 엑셀 파일을 열어보자. 지난번 코드를 그대로 가져와도 좋다.

import pandas as pd

df = pd.read_excel("sample.xlsx",engine="openpyxl",na_values=" ")
print(df)

 

데이터프레임에서 행과 열을 추가하는 방법은 다양하다. 관련 블로그를 검색해보면 다양한 방법으로 행과 열을 추가할 수 있다. 사용방법은 그때그때 상황에 따라 달라질 수 있으나, 처음 데이터프레임을 접하는 사람은 한 두가지 방법만 먼저 확

실히 익혀 두면 좋을것 같다.

파이썬 (Python) 데이터프레임 열 추가하기

먼저 현재 데이터프레임에서 열을 하나 추가해보고, 초기값은 0으로 채워보자. 열 추가는 생각보다 간단하다.

 

먼저 현재 데이터프레임의 형태를 출력해보자. 엑셀과 동일한 데이터가 들어간것을 알 수 있다. 맨 앞의 열은 인덱스라고 설명을 하였다. 일단 무시하자.

 

이제 이 열의 끝에 새로운 열을 한번 추가해보자. 

 

새로운 열의 이름은 TIC로 하기로 하고 초기값은 0으로 추가해보겠다. 아래의 코드를 입력해보자.

import pandas as pd

df = pd.read_excel("sample.xlsx",engine="openpyxl",na_values=" ")
df['TIC']=0
print(df)

TIC라는 컬럼이 오른쪽 끝에 잘 들어간 것을 알 수 있다. 열 추가는 이것이 전부이다. 가장 쉬운 방법이고, 가장 많이 사용하는 방법이다. 물론 다양한 추가 방법이 있지만 일단 이것만 기억하자.

 

단점이 있다면 원하는 곳에 넣을 수가 없다는 것이다. 저렇게 만들어놓고, 나중에 원하는 곳으로 열을 이동해야 한다. 그리고 행에 따라 원하는 값을 넣을 수 없다. 모든 값은 하나의 값으로 들어가야만 한다.

파이썬 (Python) 데이터프레임 행 추가하기

행을 추가하는것은 열을 추가하는것보다 조금 더 까다롭다. 그리고 데이터프레임이 계속 업데이트 되면서 사용법이 조금씩 바뀌기 때문에 구글링을 하다보면 안되는 경우가 종종 있다.

 

가장 대표적인것이 append 함수다. 예전에 데이터프레임의 마지막 행에 추가하는 방법으로 append() 함수가 있었지만 최근에는 지원을 하지 않는것 같다.

 

그래서 행을 추가하기 위해서는 반드시 내가 추가하고자 하는 위치를 지정해줘야 한다. 그리고 모든 열의 값을 다 입력을 해주어야 한다. 현재 총 11개의 열이 있으니 11개 열에 해당하는 값을 모두 입력해줘야지만 행이 추가된다.

 

그럼 가장 대표적인 방법으로 행을 추가해보자. 가장 대표적인 방법은 loc를 사용하는 것이다. loc는 loctation을 의미한다.

 

우리가 넣고 싶은 행의 index 값을 통하여 행을 입력하는 방식이다. 엑셀파일에는 인덱스라는 열이 없었지만 데이터프레임으로 변환을 하게 되면 자동으로 인덱스가 생긴다. 자동으로 생기지 않고 내가 인덱스를 관리하고자 한다면 엑셀파일을 열때 인덱스를 지정하면 된다. 그 방법은 나중에 또 다루겠다.

 

아무튼 데이터프레임을 출력해보면 열이름이 없는 열이 생기는데 이것이 인덱스이다.

 

loc의 경우 이 Index를 기준으로 행을 접근한다. 따라서 마지막에 행을 추가하고 싶다면 10번 인덱스에 행을 추가하도록 인덱스를 지정해줘야 한다. 아래와 같이 코드를 입력하고 실행해보자.

import pandas as pd

df = pd.read_excel("sample.xlsx",engine="openpyxl",na_values=" ")
df['TIC']=0

df.loc[10]=[2024,1,1,1,1,0,0,0,0,0]
print(df)

 

결과는 에러가 발생할 것이다.

에러 내용을 컬럼과 미스매치 된단다. 즉, 컬럼은 11개인데 입력은 10개만 해줘서 그렇다. 

loc로 행을 추가하기 위해서는 반드시 모든 열의 값을 함께 추가해줘야 한다.

import pandas as pd

df = pd.read_excel("sample.xlsx",engine="openpyxl",na_values=" ")
df['TIC']=0

df.loc[10]=[2024,1,1,1,1,0,0,0,0,0,1]
print(df)

 

이렇게 마지막에 1이라는 값을 넣어주고 다시 실행해보자. 

10번 인덱스에 정상적으로 행이 추가된것을 알 수있다.

 

이 방법이 조금 불편할 수 있다. 인덱스를 지정해야 하고, 모든 값을 넣어줘야 하기때문에 일일이 인덱스와 데이터를 맞춰서 추가하는게 과연 편한 방법일까? 

 

지금 예시에서는 불편할 수 있지만 앞으로 나중에는 for문을 통하여 자동으로 인덱스를 지정하여 값을 넣어줄 것이고, 행을 추가하는 더 편한 방법에 대하여 알아볼 것이다. 아무튼 이 방법이 가장 기초기 때문에 이 방법은 꼭 알아두도록 하자

파이썬 (Python) 데이터프레임 데이터 변경하기

행과 열을 추가하는 방법을 앞에서 다루었다. 이 방식은 열 전체를 추가하거나 행 전체를 추가하는 방법이었다. 그렇다면 이중 특정 행의 특정 열값만 변경하는 방법을 알아보자. 즉, 이렇게..

 

5~10행까지 새로 추가한 TIC 열의 값을 1로 변경해보는 코드를 만들어보자.

우선 5번행의 값부터 변경해보자. 위의 예제에서 df.loc[5, 'TIC'] = 1 코드만 추가해보자

import pandas as pd

df = pd.read_excel("sample.xlsx",engine="openpyxl",na_values=" ")
df['TIC']=0

df.loc[10]=[2024,1,1,1,1,0,0,0,0,0,1]

df.loc[5, 'TIC'] = 1
print(df)

 

5번행의 TIC 열의 값을 1로 변경된것을 확인할 수 있다.

나머지도 같은 방법으로 변경해보자.

import pandas as pd

df = pd.read_excel("sample.xlsx",engine="openpyxl",na_values=" ")
df['TIC']=0

df.loc[10]=[2024,1,1,1,1,0,0,0,0,0,1]

df.loc[5, 'TIC'] = 1
df.loc[6, 'TIC'] = 1
df.loc[7, 'TIC'] = 1
df.loc[8, 'TIC'] = 1
df.loc[9, 'TIC'] = 1
df.loc[10, 'TIC'] = 1

print(df)

조금 무식한(?) 방법이지만 일단 이렇게 넣어주고 실행해보자. 

 

정상적으로 변경이 된것을 알 수있다. 만약 변경할 행이 100개, 1000개, 10000개 정도 된다고 한다면? 

그냥 for문을 쓰면 된다.

import pandas as pd

df = pd.read_excel("sample.xlsx",engine="openpyxl",na_values=" ")
df['TIC']=0

df.loc[10]=[2024,1,1,1,1,0,0,0,0,0,1]

for i in range(5,11):
    df.loc[i, 'TIC'] = 1
    
print(df)

 

이렇게 2줄이면 해결이 된다.

아직 for 명령어가 잘 이해가 되지 않는다면 일단 넘어가도록 하자. for는 따로 다루도록 하겠다.

파이썬 (Python) 데이터프레임 행, 열 , 데이터 다루기 예제

이제 간단한 예제를 통하여 마무리하도록 하겠다.

 

일단 오늘 내용의 핵심은 이거다.

 

위 방법 외에 수많은 방법이 있지만 일단 데이터프레임이 익숙하지 않다면 위의 3가지만 기억하자.

이것만 기억해도 충분히 활용할 수 있다.

 

엑셀 파일 sample.xlsx를 데이터프레임으로 열고 새로운 열을 하나 추가해보자. 추가할 열의 이름은 "Sum"이고, 

"Sum" 은 IC, LC, EC, FC 값을 모두 합한 값을 넣어줄 것이다.

 

가장 간단한 방법은 아래와 같다.

import pandas as pd

df = pd.read_excel("sample.xlsx",engine="openpyxl",na_values=" ")

df['Sum']=df['IC'] + df['LC'] + df['EC'] + df['FC']

print(df)

 

특정 행을 지정하여 더하는게 아니라 열의 모든 값을 더하는 것이기 떄문에 'Sum'을 만들면서 열의 값을 더해주면 된다.

 

다른 방법도 있다.

열을 지정하여 더해주는 함수가 따로 있기때문에 이렇게도 한번 구현해보자. 그리고 파일로도 저장해보자

import pandas as pd

df = pd.read_excel("sample.xlsx",engine="openpyxl",na_values=" ")

df['Sum']=df[['IC','LC','EC','FC']].sum(axis=1)
print(df)
df.to_excel("sample_240908.xlsx")

 

sum() 함수를 이용한 방법인데, 더하고자 하는 열을 따로 떼어내서.... 행으로 더해준것이다. (sum(axis=1))

잘 이해가 안되더라도 넘어가자. 나중에 다시 다 다룰것이다.

 

아무튼 엑셀 파일도 정상적으로 생성된것을 알수 있다. 실습한 내용들은 엑셀파일로 반드시 저장을 하고 열어보면서 데이터가 잘 들어갔는지 꼭 확인하자.