본문으로 바로가기
반응형

앞서 csv.DicReader를 통해서 Dictionary 형태로 데이터를 로드했습니다만 pandas를 이용하면 엑셀의 2차원 배열을 그대로 data frame으로 가져와서 사용할수 있습니다. 마치 DB의 테이블처럼 말이죠.[1]

먼저 pandas를 이용하여 excel을 로드하는 기본적인 구문부터 보도록 하겠습니다.

이글은 Phtyon 3를 기반으로 작성되었습니다.

pandas import 및 데이터 로드

import pandas as pd
xls = pd.ExcelFile('yelp.xlsx')
df = xls.parse('yelp_data') # yelp_data sheet를 읽는다.
df2 = xls.parse('cities') # cities sheet를 읽는다.

print(type(df))

yelp.xlsx라는 엑셀파일을 pd.ExcelFile()로 읽었습니다.

이렇게 읽어온 이후 parse()를 통해 특정 sheet의 내용을 가져올 수있습니다. 예제에서는 yelp_data, cities 두개의 sheet의 데이터를 읽어 dataframe에 담았습니다. 마지막 print문의 실행값은 아래와 같습니다.

단 두줄로 excel의 데이터를 담아 왔네요.

사용할 데이터 예시

먼저 불러올 excel의 구성은 아래와 같습니다.

"yelp_data" sheet

엑셀파일에는 세개의 sheet가 존재하면 나머지 두개는 아래와 같습니다.

"cities" sheet
"states" sheet

이 데이터의 특징으로는 가장 기본이 되는 "yelp_data" sheet에 각각 다른 sheet의 id값을 물고 있는걸 알수 있습니다. DB의 join을 위한 key 같네요.

Dataframe의 정보보기

먼저 data frame의 기본적인 정보를 표시해 보겠습니다.

# describe() - 전체 내용 요약

df.describe() # df의 정보 보기

describe() 함수를 호출하면 아래와 같이 컬럼당 총 row개수와 평균, 표준편차등의 정리된 표를 한번에 볼수 있습니다.

가지고 있는 데이터가 600개짜리임을 알수 있습니다.

# shape - size 반환

print(len(df)) # count 세기
print(df.shape) #(row수, column수) size 측정

len() 함수 이용시 단순히 row의 개수를 반환하지만 shape의 경우 가로x세로  = row x column의 개수를 tuple로 반환해 줍니다.

# count() - 컬럼별 개수 반환

print(df.count()) # 컬럼별 row 개수

각 컬럼이 가지는 row 개수를 반환합니다. 여기는 전부 데이터가 채워져 있는상태이므로 전부 600개라고 반환 됩니다.

반응형

# columns - 컬럼 이름 반환

df.columns ## 컬럼만 표시
print(df.columns)
print(type(df.columns))

결과는 아래와 같습니다. 

# dtypes - 컬럼별 데이터 타입 표시

print(df.dtypes) # 컬럼별 데이터 타임 표시

각 컬럼의 데이터 타입을 나타냅니다. 나중에 casting 하려면 dtypes를 이용한 선 확인이 필요하겠죠?

Data의 출력

#head() - 상위에서 특정 개수만큼 보기

데이터가 방대하다면 print로 다 찍어보기는 어렵습니다. 상단에 위치하는 데이터를 제한해서 보려면 head()함수를 이용합니다. 기본값은 5개 이며, 그 이외의 값은 직접 지정할 수 있습니다.

print(df.head()) # 기본 상위 다섯개만 보기
print(df.head(100)) #100개까지만 보기

컬럼이 여러개라 한줄에 표현하지 못했지만 head() 호출시 5개, head(100) 지정시 100개를 반환함을 알 수 있습니다.

#drop_duplicates() - 중복제거

중복된 컬럼을 제거합니다. 단 제가사용한 데이터에서는 중복된값이 없어 그대로 출력되기 때문에 결과는 표시하지 않았습니다.

df = df.drop_duplicates() # 중복제거

#[COLUMNS] - 특정 컬럼만 보기

아래와 같이 [] 안에 특정 컬럼명이나 컬럼명을 갖는 list를 넣으면 해당 컬럼만 출력할 수 있습니다.

print(df["name"].head(10)) # 특정 컬럼만 보기

#특정 컬럼만 보기
columns = ["name","city_id","state_id"]
df[columns].head(10)

 

References

[1] 2022.06.08 - [개발이야기/Python] - [Python] 파이썬#4 csv 파일 로드 #1 DicReader

반응형