• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

도와주세요. 강사님

20.09.10 22:10 작성 조회수 196

1

못보 신것 같아 다시 문의 드립니다. 

답변 고맙습니다.  DATA 불러오기 문제가 있어서 설명 부탁 할께요. 

우선 회사에서 구글 사용해서 colab를 사용하고요. Spreadsheet를 불러와서 판다스 활용합니다. 

그래서 gsspread(https://gspread.readthedocs.io/en/latest/api.html)설명서를 참고 하는데요. 

그 부분에서 get_all_values와 가get_all_records 차이를 파악하다, 2번째 질문을 하였습니다. 

현재 데이타 볼러올 때의 문제점은

Spreadsheet 아래 날짜를 읽어올 때, datatype이 int64로 바뀌고요

get_all_values(value_render_option='UNFORMATTED_VALUE')

<google-sheets-html-origin style="box-sizing:inherit"></google-sheets-html-origin>

<google-sheets-html-origin style="box-sizing:inherit"></google-sheets-html-origin>

일자 출금
2019. 10. 31 0
2019. 10. 31 1,000
2019. 10. 31 18,000
2019. 10. 31 57,450

그래서 다시 datetime으로 변경하면 df['일자'] = pd.to_datetime(df['일자'])

전혀 다른 날짜(시간포함해서)가 아래와 같이 나옵닙니다.

다른 숫자나 text는 int,object로 불러와서 이상 없이 보이는데, date는 sheet 자체에서 어떤 날짜 포맷으로 저장 문제인지 아님 api 자체내에서 불러올때 type를 지정 해야 되는 문제인지 몰라서요. 설명 해 주시면 감사하겠습니다

답변 3

·

답변을 작성해보세요.

2

안녕하세요.

일자의 데이터 타입이 int 형식이면 timestamp 값으로 인식해서 timestamp 가 시작하는 1970-01-01 부터 날짜를 시작합니다.

그래서 df["일자"] = df["일자"].astype(str) 으로 데이터 타입을 변경해 주신 후에 datetetime 으로 변환해 주셔야 합니다.

 df["일자"] = df["일자"].astype(str)  이 부분이 실습에 있는데 놓치신거 같습니다.

그리고 새로운 내용은 이렇게 질문을 남겨주시면 알림에 뜨는데  댓글로 남겨주시면 알림이 기존 메시지와 합쳐져서 제가 인지하지 못할 수 있으니 되도록 새로운 질문은 새글로 올려주시면 제가 알림 확인할때 도움이 됩니다.

1

안녕하세요.

금액에 있는 , 는 문자이기 때문에 int 로 읽어오지 못하고 문자열로 읽어오게 됩니다.

또, 금액에 눈에 보이지 않는 공백 문자 등이 포함되어 있더라도 문자열로 읽어오게 됩니다.

그래서 수치데이터로 사용하기 위해서는 df["금액"].astype(int)  혹은 df["금액"].astype(float)  등으로 변환을 해주어야 하나 공백문자 등이 포함되면 .astype 으로 변환이 안 됩니다.

그래서 이럴 경우에는 pd.to_numeric() 으로 변환을 해주셔야 합니다. 이 때, errors 라는 옵션을 다음과 같이 지정해 주어야 문자가 섞여있는 숫자를 수치데이터로 변환해 줍니다.

또,  comma(,) 값은 아래의 과정을 거치지 전에 df["금액"] = df["금액"].str.replace(",", "") 처럼 제거 후에 사용하시는게 좋습니다.

pd.to_numeric(s, errors='coerce')
0    NaN
1    1.0
2    2.0
3   -3.0

1

고맙습니다. 데이타 불러오는데 타입 변경이 칼럽마다 달라서 손이 많이 가네요. 32000는 int로 읽으면서, 32,000 금액은 object로 읽는지.. 데이타 전처리 하기 전에 data 타입 부분 부터 고생을 하네요. 

그리고 질문이 너무 장황해서 답변이 없으신 줄 알았습니다. 향후에는 새질문으로 물어 보겠습니다.