해당 내용은 Datacamp의 Data engineering track을 정리했습니다.
Streamlined Data Ingestion with pandas의 chapter 2에 대한 내용입니다.
해당 포스팅에는 아래의 내용을 포함하고 있습니다.
- 스프레드시트 데이터 불러오기
- boolean 타입 다루기
- Datetime 타입 다루기
1. Introduction to spreadsheets
스프레드시트는 엑셀 파일로 잘 알려져 있습니다. 스프레드시트는 테이블 형태로 되어 있으나, 공식이 적용된 경우도 존재하기 때문에 flat file과는 다르다고 볼 수 있습니다. 또한 하나의 엑셀 파일에는 여러 개의 스프레드 시트가 존재할 수 있습니다. 우선 엑셀 파일을 불러오기 위해서는 read_excel이라는 명령어를 사용해야 합니다. pandas에서 제공하는 함수이며, 사용방법은 read_csv와 동일합니다. 또한 read_excel에서는 read_csv에서 활용했던 nrows, skiprows, usecols를 활용 가능합니다. 추가적으로 엑셀 상단에 있는 A, B, C로도 column을 지정할 때 활용 가능합니다.
import pandas as pd
survey_data = pd.read_excel("fcc_survey_with_headers.xlsx", skiprows=2, usecols="W:AB, AR")
2. Getting data from multiple worksheets
worksheet 형태의 파일은 위에서 언급했던 것처럼 여러 개의 sheet를 가지고 있습니다. 기본적으로 read_excel로 불러올 때, 첫 번째의 worksheet를 가져오도록 되어 있습니다. 만약, 필요한 worksheet가 2번째일 때에는 어떻게 불러올 수 있을까요? 그런 경우에는 sheet_name이라는 argument에 원하는 worksheet의 이름을 넣어주면 됩니다. 물론, index로도 접근이 가능하지만 0부터 시작이라는 것에 유의하셔서 사용하셔야 합니다. 또한 여러 개의 worksheet를 불러오고 싶을 때에는 리스트 형태로 넣어주면 가능합니다.
import pandas as pd
# Get the second sheet by position index
survey_data_sheet2 = pd.read_excel('fcc_survey.xlsx', sheet_name=1)
# Get the second sheet by name
survey_data_2017 = pd.read_excel('fcc_surcey.xlsx', sheet_name='2017')
추가적으로, 모든 sheet를 가져오고 싶을 때에는 sheet_name=None으로 지정해주면 모든 sheet를 불러올 수 있습니다. 그렇게 불러온 값을 items()를 통해서 key, value를 확인해볼 수 있는데, 여러 개의 sheet가 담긴 것을 확인할 수 있습니다.
3. Modifying imports: true/false data
Boolean Data는 참과 거짓으로 표현할 수 있는 데이터입니다. 그래서 엑셀이나 다양한 자료에서 확인할 수 있습니다. 또한 Boolean Data는 다양한 방법으로 표현이 가능합니다. 하지만, Pandas에서는 boolean 형태를 자동으로 인식하지 못하는 경우가 많습니다. 이전에 칼럼의 데이터 타입을 지정해줬던 것처럼 dtype으로 수정해줄 수 있습니다. 보통 결측치는 Boolean column에서 True로 인식합니다. 또한 Yes/No와 같이 구분되어 있는 경우에는 모두 True로 인식하기 때문에 각각을 지정해줄 필요가 있습니다. 지정해주는 방법은 true_values에 True로 인식해야 하는 값을, false_values에 False로 인식해야 하는 값을 넣어주면 됩니다.
bool_data = pd.read_excel("fcc_survey_booleans.xlsx",
dtype={"AttendedBootcamp": bool,
"AttendedBootCampYesNo":bool}
true_values=["Yes"],
false_values=["No"])
4. Modifying imports: parsing dates
Datetime value는 string으로 인식할 때가 많이 있어서 object type을 갖습니다. Datetime의 type을 변경할 때에는 이전의 type 변경을 위해 사용했던 dtype말고 parse_dates라는 argument를 사용해야 합니다. parse_dates는 column 이름이나 index의 리스트로 입력을 받습니다. 해당 리스트에 해당하는 칼럼을 datetime 타입으로 바꿔줍니다. 추가적으로, 시간과 날짜가 나뉘어 있는 경우에는 parse_dates에 [["날짜 칼럼명", "시간 칼럼명"]]을 넣어주면, 날짜 칼럼명_시간 칼럼명으로 된 새로운 칼럼이 생성됩니다. 하지만, 기준이 맞지 않는 형태의 경우에는 parse_dates가 적용되지 않습니다. 이런 경우에는 pd.to_datetime을 적용한 뒤에 parse_dates로 타입을 변경해야 합니다.
pd.to_datetime을 적용할 때에 format을 지정해줄 수 있는데 아래와 같은 방식으로 지정할 수 있습니다.
import pandas as pd
format_string = "%m%d%Y %H:%M:%S"
survey_df["Part2EndTime"] = pd.to_datetime(survey_df["Part2EndTime"], format=format_string)