본문 바로가기

Python/Pandas

MySQL에 np.nan을 갖는 pandas.DataFrame 삽입하기

발생한 오류

raise ProgrammingError("%s can not be used with MySQL" % s)
sqlalchemy.exc.ProgrammingError: (pymysql.err.ProgrammingError) nan can not be used with MySQL

데이터프레임의 빈 값이 NaN으로 채워져 있는 상태에서 데이터프레임을 MySQL에 넣어주면서 오류 발생했다.

np.NaN을 None으로 변경해줘야 한다.

해결법

1. df.where(pd.notnull(df), None)

*df.where : 참값에 대해서는 첫번째 처리를 하고, 참이 아니면 두번째 처리를 한다.
데이터프레임 중 notnull이 참이면, 즉, null이 아닌 값은 그대로 값이 들어가고, null인 값은 None을 넣어준다.

 

참고: https://lifesteps.tistory.com/119

 

하지만 해당 방법은 pandas의 version이 1.3.0미만일때만 사용가능하다.

2. df.replace({np.nan: None})

 

참고: https://stackoverflow.com/questions/14162723/replacing-pandas-or-numpy-nan-with-a-none-to-use-with-mysqldb/54403705#54403705

 

'Python > Pandas' 카테고리의 다른 글

[Python] Pandas .loc[] 과 .iloc[]  (0) 2021.01.18
[부스트코스] [머신러닝을 위한 파이썬] Pandas Selection & Drop  (0) 2021.01.16
Pandas  (0) 2020.07.25