Python with CSV
Ex 1
- CSV에 있는 데이터를 Python으로 INSERT
import pandas as pd
df = pd.read_csv('police_station.csv')
df.head()
![](https://velog.velcdn.com/images/gmio/post/0b5ee334-c5dd-469c-b598-455a90861097/image.png)
- cursor 만들기
- 읽어올 양이 많은 경우 cursor 생성 시 buffer 설정
import mysql.connector
conn = mysql.connector.connect(
host = 'localhost',
user = 'root',
password = '********',
database = 'zerobase'
)
cursor = conn.cursor(buffered = True)
sql = "INSERT INTO police_station VALUES (%s, %s)"
commit()
: Database에 적용하기 위한 명령
for i, row in df.iterrows():
cursor.execute(sql, tuple(row))
print(tuple(row))
conn.commit()
![](https://velog.velcdn.com/images/gmio/post/623c644d-3244-4781-a8ab-8356346bbab3/image.png)
cursor.execute('SELECT * FROM police_station')
result = cursor.fetchall()
for row in result:
print(row)
df = pd.DataFrame(result)
df
![](https://velog.velcdn.com/images/gmio/post/1cac32f4-0152-4a88-9803-a5e15f38fe33/image.png)
Tip
- csv 한글이 깨지는 경우, encoding 값을 ‘euc-kr’로 설정
- 우리나라 사이트에서 제공받은 csv 파일들의 경우 대부분 사용
import pandas as pd
df = pd.read_csv('2020_crime.csv', encoding = 'euc-kr')
df.head()
![](https://velog.velcdn.com/images/gmio/post/d56b5d14-537b-41ed-a7dd-9301a8f2938f/image.png)
Ex 2
- crime_status 테이블에 2020_crime.csv 데이터를 입력하는 코드 작성
import mysql.connector
import pandas as pd
df = pd.read_csv('2020_crime.csv', encoding = 'euc-kr')
df.head()
conn = mysql.connector.connect(
host = 'localhost',
user = 'root',
password = '********',
database = 'zerobase'
)
sql = "INSERT INTO crime_status VALUES ('2020', %s, %s, %s, %s)"
cursor = conn.cursor(buffered = True)
for i, row in df.iterrows():
cursor.execute(sql, tuple(row))
print(tuple(row))
conn.commit()
![](https://velog.velcdn.com/images/gmio/post/de84742c-5ae3-480a-a0a5-5f6369d9a38c/image.png)
cursor.execute('SELECT * FROM crime_status')
result = cursor.fetchall()
for row in result:
print(row)
![](https://velog.velcdn.com/images/gmio/post/3300aa1f-b651-451f-9c5c-4f2a481b1329/image.png)
df = pd.DataFrame(result)
df.head()
![](https://velog.velcdn.com/images/gmio/post/e3094542-ceb2-42cc-ba87-23587f9ccc3a/image.png)
실습
- AWS RDS (database-1) zerobase에 접속
import mysql.connector
mydb = mysql.connector.connect(
host = 'localhost',
user = 'root',
password = '********',
database = 'zerobase'
)
- CCTV 테이블 생성
import pandas as pd
df = pd.read_csv('Seoul_CCTV.csv', encoding = 'utf-8')
df.head()
![](https://velog.velcdn.com/images/gmio/post/24e76648-d181-40e5-a33c-2a3349c85d3c/image.png)
sql = 'CREATE TABLE cctv (기관명 varchar(8), 소계 int, 2013년도이전 int, 2014년 int, 2015년 int, 2016년 int)'
cursor = mydb.cursor(buffered = True)
cursor.execute(sql)
![](https://velog.velcdn.com/images/gmio/post/b0b5b67a-60b4-4855-8313-72ded36b0a4e/image.png)
- CCTV SQL 파일에서 데이터를 Pandas로 읽어오기
import pandas as pd
df = pd.read_csv('Seoul_CCTV.csv', encoding = 'utf-8')
df.head()
- 데이터를 cctv 테이블에 INSERT
sql = 'INSERT INTO cctv VALUES (%s, %s, %s, %s, %s, %s)'
cursor = mydb.cursor(buffered = True)
for i, row in df.iterrows():
cursor.execute(sql, tuple(row))
print(tuple(row))
mydb.commit()
![](https://velog.velcdn.com/images/gmio/post/e2e3a619-296d-4616-bd00-11f736a13b66/image.png)
- cctv 테이블의 데이터를 조회화여 확인
cursor.execute("SELECT * FROM cctv")
result = cursor.fetchall()
for row in result:
print(row)
![](https://velog.velcdn.com/images/gmio/post/9631ba07-5aa3-4b6b-9849-a9590fbd479b/image.png)
- 조회된 데이터를 pandas로 출력
df = pd.DataFrame(result)
df.head()
![](https://velog.velcdn.com/images/gmio/post/4eb24f02-98b5-4f0e-a792-45355df2ad56/image.png)