dataframe의 한 컬럼에 대해 unique한 값을 얻기위해 'datafame['컬럼명'].uique()' 메소드를 사용할 수 있고 결과값이 list가 아닌 ndarray형태로 생성돼죠.

 

unique() 메소드를 이용하여 생성된 list를 다른 컬럼으로 생성하거나 비교를 위한 list로 활용하려하던 중 ndarray 형태로는 원하는 작업에 지장이 생겨서 list형태로 변환하는 과정입니다.

 

numpy 형태의 배열의 경우 list와 다르게 ','로 구분이 안되어있습니다.

list형태로 간단하게 변경할 수 있습니다.

import numpy as np
unique_values = df_proceed['시간대별'].unique()
print(unique_values)
print(type(unique_values))

# ndarray to list
python_list = unique_values.tolist()
# 결과 확인
print(python_list)

ndarray

Bigquery Table → CSV file download-> Python Dataframe Read 과정에서 발생한 문제

파이썬으로 데이터 분석을 위해 빅쿼리 테이블을 csv로 받았습니다. (google.bigquery packages는 사용하지 않음)

연, 월, 일만을 갖고있는 Datetime을 나타내는 컬럼의 포맷을 변경하면서 발생한 문제입니다.


1. bigquery 테이블을 가져온 csv 파일 Read

Datetime 컬럼 예시

위 컬럼을 yyyy-mm-dd 형태로 포맷을 변경할거죠

 

2. dt.strtime() 메소드 사용 → 에러 발생

dataframe_of_csv = pd.read_csv('bigquery_table.csv')
dataframe_of_csv["SEARCH_DATE"] =  dataframe_of_csv['SEARCH_DATE'].dt.strftime('%Y-%m-%d')

"AttributeError: Can only use .dt accessor with datetimelike values" 에러가 발생합니다

Can only use .dt accessor with datetimelike values는 .dt 접근자는 datetimelike 값에만 사용할 수 있다는 의미입니다. 즉, 해당 컬럼이 datetimelike 데이터 형식이 아니라서 발생한 오류입니다.

 

3. pd.to_datetime(dataframe['컬럼명']) 메소드 사용 → 해결

코드를 아래와 같이 수정하여 원하는 형태로 formmating을 할 수 있습니다.

dataframe_of_csv = pd.read_csv('bigquery_table.csv')
dataframe_of_csv['SEARCH_DATE'] = pd.to_datetime(dataframe_of_csv['SEARCH_DATE'])

Datetime 컬럼 변환 예시

 


결론

bigqeury, csv(file), python pandas(dataframe) 등 테이블 형태를 여러 방법으로 다루다보면 column의 데이터 형으로 인한 문제는 흔하게 발생합니다.

특히 Datetime의 경우 ETL과정에서 형식의 일치가 무엇보다 중요하죠

+ Recent posts