[python] groupby 에서 index 사용 안 하기 - pandas
multi index 피하기 groupby를 쓰면 기본적으로 멀티인덱스가 생성된다. 이 멀티인덱스가 groupby한 후의 전처리를 방해하므로 추후 작업이 남아있다면 멀티인덱스를 생성하는 파라미터를 False로 지정해주는 게 좋다. 예시 코드 'as_index = False' 라는 파라미터를 추가해주자.
multi index 피하기 groupby를 쓰면 기본적으로 멀티인덱스가 생성된다. 이 멀티인덱스가 groupby한 후의 전처리를 방해하므로 추후 작업이 남아있다면 멀티인덱스를 생성하는 파라미터를 False로 지정해주는 게 좋다. 예시 코드 'as_index = False' 라는 파라미터를 추가해주자.
특정 문자열 포함하는 행 제거하기 전처리를 하다보면 특정 문자열을 포함하는 행 전체를 제거할 일이 많다. 문자열 관련 전처리는 dataframe.str 으로 대부분 해결 되는데 오늘은 str.contains 를 이용해보자. str.contains 사용하기 dfresult = df[~df['Time'].str.contains("2021-03-01", na=False, case=False)] "2021-03-01"
여러 시트 한 번에 읽기 pandas로 excel을 읽을 경우, read_excel 이라는 함수를 쓰게 된다. 만약 백만행이 넘어가 sheet1, sheet2, ... 까지 쓰여있다면 어떻게 해야 할까? 우리가 흔히 쓰는 것 처럼 pd.read_excel()를 쓴다면 sheet1에 있는 데이터만 읽어진다. 따라서 read_excel함수의 파라미터 중 sheet_name = None 을 추가해주면 모든 시트를 읽을 수 있다. 그러나 sheet_name = None 의 원리는 key: sheet1, value: 모든 데이터와 같아서 데이터 프레임으로써 쓸 수 없기 때문에 concat으로 한번 더 묶어줘야 한다. 예제 코드 df = pd.concat([value.assign(sheet_source=key) f..
situation if date == '' : continue 시간이 null인 경우는 insert 안 하게끔 해줬으나 time data 0000-00-00 00:00:00 doesn't match format specified 이런 오류가 떴다. reason 이유는 아직 잘 모르겠다 ,, solution DB에 insert할 때 없는 경우, null이 아닌 0000-00-00 00:00:00로 업로드 된 것 따라서, if date == '0000-00-00 00:00:00' : continue 이렇게 해줘야 오류를 피할 수 있다.
pymysql을 이용하여 db 연동하기 python에서 mysql 데이터베이스를 사용하기 위해 우선 python DB API 표준을 따르는 MySQL DB 모듈을 다운 받아 설치하다. MySQL DB 를 지원하는 Python 모듈은 여러 가지가 있는데, 여기서 pymysql 이라는 모듈을 사용해 본다. 참고로, 다른 MySQL 모듈을 사용하더라도 동일한 API를 사용하게 된다. 1. pymysql 설치하기 먼저, pymysql 라이브러리를 설치해줘야 한다. pip을 이용하여 간단하게 설치해주자. python3 -m pip install PyMySQL 2. db 연결하기 pymysql에 connect라는 함수를 이용하여 db 서버에 연결 할 수 있다. 1) PyMySql 모듈을 import 한다. 2) p..
한번에 insert 여러 개 하기 DB에 업로드할 때 보통은 한 줄씩 하는 경우가 많다. 한 줄씩 해도 상관은 없지만 업로드하는 행 수가 100 만행, 1000 만행이 넘어간다면??? 처음에 구글링을 통해 알게 된 방법은 values (값 1, 값 2), (값 3, 값 4) 이렇게 values 뒤에 여러개를 붙이면 된다는데 어느 세월에 다 하겠나 싶고.. 데이터 분석에 있어서 시간 단축은 떼려야 뗄 수 없는 관계이다. 10분이라도 줄이기 위해 생각한 방법인데 예상보다 업로드 속도가 매우매우 빠르다. 예제 코드 # 빈 리스트 생성 sql_rows = [] # 리스트에 한줄씩 추가 sql_row = '({},{},{},{})'.format(id, name, date, value) sql_rows.append..