본문 바로가기

Manual

파이썬 pandas, 액셀 파일 사용

Photo by Rubaitul Azad unsplash.com

액셀 프로그램이 없어도 python으로 액셀 파일을 다운로드하여 읽고, 쓰고, 수정하고, 삭제하는 작업을 할 수 있어 편리합니다. 

pandas 라이브러리를 이용해 액셀 파일을 사용하는 방법을 정리해보려 합니다.

리스트나 딕셔너리를 이용하면 액셀 프로그램 없이 액셀 파일을 만들 수 있습니다.

리스트나 딕셔너리 형식으로 데이터프레임을 만드는 방법도 함께 정리하려 합니다. 

 

목차

1. 액셀 파일 읽고, 쓰기

2. 액셀 파일에서 원하는 데이터 찾기

3. 액셀 파일에서 원하는 데이터 삭제

     1) 리스트로 데이터 프레임 만들기

     2) 인덱스를 이용하여 원하는 row의 데이터 삭제

     3) 원하는 column 전체 삭제 

     4) 특정 column의 특정 데이터를 갖는 row 삭제

4. 액셀 파일에서 원하는 데이터 바꾸기 

     1) dictionary를 이용한 DataFrame 만들기

     2) 특정 셀의 데이터 바꾸기


1. 액셀 파일 읽고, 쓰기

     1)  pandas 불러오기 

  • 'import' 명령어를 사용해 pandas 라이브러리를 불러온다.
  • 'as pd' 명령어를 사용해 간단히 'pd'로 줄여 호출할 수 있게 한다.
import pandas as pd

     2) 액셀 파일 읽기 

          (1) 파일 상태 그대로 읽어 오기

  • pd.read_excel('파일 이름') 형태의 명령어를 사용하여 액셀 파일(Score.xlsx)을 읽어 올 수 있다.
  • 읽어 온 액셀 파일을 데이터프레임에 저장하기 위해 'df = ' 사용
  • 잘 읽어 왔는지 확인하기 위해 'df' 명령어 사용
df = pd.read_excel('Score.xlsx') 
df

《결과》

  • 액셀 파일에 칼럼 이름이 없어 첫 번째 열이 칼럼 이름이 되어버렸다.

          (2) 칼럼 이름 만들며 읽어 오기

  • 칼럼 이름으로 사용할 이름이 들어 있는 리스트 만들기
  • column_name = [ 쉼표(,)로 구분된 '칼럼 이름' ] 형식의 명령어 사용
column_name = [ 'number', 'kor', 'eng', 'math' ]
  • header = None으로 액셀 파일의 첫 번째 열이 칼럼 이름 아님을 알려주고
  • names = 칼럼 이름이 든 리스트 이름 형식의 명령어를 이용하여 칼럼 이름을 만들며 읽어올 수 있다.
column_name = [ 'number', 'kor', 'eng', 'math' ] 
df = pd.read_excel('Score.xlsx', header = None, names = column_name) 
df

《결과》

 

     3) 액셀 파일 쓰기

  • 칼럼 이름을 추가한 데이터프레임을 액셀 파일로 저장.
  • to_excel('파일 이름', sheet_name = '시트 이름') 명령어 사용.
df.to_excel('Score-header.xlsx', sheet_name = 'headerSheet')

 

2. 액셀 파일에서 원하는 데이터 찾기

     1) pandas 불러오기

  •  import 명령어로 pandas 라이브러리를 불러오고, 간단히 pd로 줄여 부르기로 한다.
  • read_excel('액셀 파일 이름') 명령어를 사용하여 액셀 파일(Score-header.xlsx)을 읽어온다.
  • 읽어 온 파일을 df = 명령어를 사용하여 데이터 프레임에 저장한다.
  • df 명령어로 읽어 온 액셀 파일을 확인한다.
import pandas as pd

df = pd.read_excel('Score-header.xlsx')
df

《결과》

< 액셀 파일을 읽고 화면에 출력 >

 

     2) 한 칼럼에서 원하는 데이터 찾기 

  • df = df[ df.칼럼 이름 [연산기호] [데이터] ] 형식으로 사용
  • math 칼럼의 값이 65 이상 이면서 70점 미만인 것을 찾으려면, 부등호(<, >)와 등호(=)를 사용
  • 데이터 프레임에서 math <70인 것들을 찾아 데이터 프레임에 저장하고
  • math <70인 데이터로 구성된 데이터 프레임에서 math >= 65인 것들을 찾아 데이터 프레임에 저장
  • df 명령어로 제대로 실행되었는지 확인
df = df[df.math < 70 ]
df = df[df.math >= 65 ]
df

《결과》 math 칼럼의 값이 65 이상 이면서 70점 미만인 데이터

 

     3) 두 칼럼에서 원하는 데이터 찾기 

  • kor 칼럼의 값이 90 이상이고, math 칼럼의 값이 70 이하인 두 가지 조건을 모두 만족하는 데이터를 찾기 위해
  • kor 칼럼의 값이 90 이상인 것을 찾아 데이터 프레임에 저장하고
  • 그 데이터 프레임에서 math 칼럼의 값이 70 이하인 데이터를 뽑아 다시 데이터 프레임에 저장
df = df[df.kor >= 90 ]
df = df[df.math <= 65 ]
df

《결과》 kor 값이 90 이상이면서, math 값이 70 이하인 값 출력

 

     4) 콕 집어 원하는 데이터 찾기

  • kor 값이 88이거나 100인 것만 콕 집어 찾기 위해서는 
  • df ['칼럼 이름'].isin([쉼표(,)로 구분된 원하는 값])] 형태의 명령어 사용
df = df[df['kor'].isin([88, 100])]
df

《결과》 kor 값이 88 또는 100인 데이터만 출력

 

3. 액셀 파일에서 원하는 데이터 삭제

읽어 온 액셀 파일의 특정 행이나 열을 제거하려고 한다. 먼저 리스트를 이용해 액셀 파일을 읽어 온 것과 같은 데이터프레임을 만들자

     1) 리스트로 데이터 프레임 만들기

  • import 명령어로 pandas 라이브러리를 불러오고, record_list = [  {'칼럼 이름' : '값', '칼럼 이름' : '값',...},   {'칼럼 이름' : '값', '칼럼 이름' : '값', ...}, ... ] 형식을 사용하여 리스트를 만든다. 
  • 예를들어, name, kor, eng, math 4개의 column과 4개의 row로 된 record_list란 이름을 가진 list를 만들어
record_list = [
    {  'name' : 'AAA', 'kor' : 92, 'eng' : 100, 'math' : 88 },
    {  'name' : 'BBB', 'kor' : 95, 'eng' : 90, 'math' : 85 },
    {  'name' : 'CCC', 'kor' : 86, 'eng' : 70, 'math' : 98 },
    {  'name' : 'DDD', 'kor' : 94, 'eng' : 88, 'math' : 95 }
]
  • 만든 리스트를 데이터프레임에 저장하고
df = pd.DataFrame(record_list)
  • 데이터프레임의 칼럼 순서를 정리하고, 화면에 출력하여 확인
df = df[['name', 'kor', 'eng', 'math']]
df

《결과》 name, kor, eng, math 4개의 column과 4개의 row가 만들어졌다.

 

     2) 인덱스를 이용하여 원하는 row의 데이터 삭제

  • 인덱스는 제일 왼쪽 column에 있다.
  • df.drop([삭제하려는 인덱스], inplace = True)를 이용한다.
  • 만약, 인덱스가 '1'과 '3'인 row를 삭제하려면 
df. drop([1, 3], inplace = True) 
df

《결과》 인덱스가 '1'과 '3'인 row가 삭제 되었다. 


     3) 원하는 column 전체 삭제 

  • df.drop(["column 이름"], axis=1, inplace = True)를 이용한다.
  • 만약, 'eng' column 전체를 삭제하려면
df.drop(["eng"], axis=1, inplace = True) 
df

《결과》 'eng' column이 제거 되었다. 

 

 

     4) 특정 column의 특정 데이터를 갖는 row 삭제

  • df.drop(df.index[(df['column 이름'] == 원하는 데이터)], inplace=True)를 이용한다.
  • 처음 데이터프레임에서 'eng' column 값이 '70'인 row를 삭제해 보자.
df.drop(df.index[(df['eng'] == 70)], inplace=True) 
df

《결과》'eng'가 '70'인 row만 제거되었다.다. 

 

4. 액셀 파일에서 원하는 데이터 바꾸기 

이번에는 액셀 파일을 읽어오는 대신 dictionary로 DataFrame을 만들고, 데이터프레임의 특정 값을 원하는 값으로 바꿔보자. 액셀 파일을 읽어왔을 때도 마찬가지로 작업하면 된다.

     1) dictionary를 이용한 DataFrame 생성

  • dictionary는 {'칼럼 이름' : '데이터 나열'.split()} 또는 {'칼럼 이름':[ 쉼표(,)로 구분된 값]} 형식을 이용하여 만들고
  • 만든 dictionary를 mydata에 저장
  • df = pd.DataFrame(mydata) 형식의 명령어를 이용해 데이터프레임을 만든다. 
  • df 명령어로 화면에 출력하여 확인
import pandas as pd
mydata = {'Color': 'Red Red Red Blue'.split(), 'Value': [100, 150, 50, 50]}
df = pd.DataFrame(mydata)
df

《결과》 'Color', 'Value' 두 개의 칼럼과 4개의 row를 가진 데이터프레임이 생성되었다.다. 

 

 

     2) 특정 셀의 데이터 바꾸기

  • loc[df.index[row index], 'column name'] = '바꾸려는 값' 형식의 명령어 사용.
  • 예를 들어 인덱스 '2'의 'Value' 칼럼의 값을 '1000'으로 바꾸려면
df.loc[df.index[2], 'Value'] = 1000
df

《결과》 2번 row의 Value가 50에서 1000으로 바뀌었다.

 

  • 1번 row의 Color 값을 Yellow로 바꾸려면
df.loc[df.index[1], 'Color'] = 'Yellow'
df

《결과》 2번 row의 Value가 50에서 1000으로 바뀌었다.

 

728x90