>  기사  >  백엔드 개발  >  Python은 Pandas를 사용하여 CSV 파일을 읽고 MySQL에 씁니다.

Python은 Pandas를 사용하여 CSV 파일을 읽고 MySQL에 씁니다.

高洛峰
高洛峰원래의
2017-03-24 17:09:024985검색

최근 Python을 사용하여 CSV를 읽고 쓰고 데이터베이스를 저장하는 과정에서 발생한 다양한 문제를 요약해 보겠습니다.

추천 관련 mysql 비디오 튜토리얼: "mysql 튜토리얼"

코드:

reload(sys)
sys.setdefaultencoding('utf-8')
host = '127.0.0.1'
port = 3306
db = 'world'
user = 'root'
password = '123456'

con = MySQLdb.connect(host=host,charset="utf8",port=port,db=db,user=user,passwd=password)
try:
    df = pd.read_sql(sql=r'select * from city', con=con)
    df.to_sql('test',con=con,flavor='mysql')
except Exception as e:
    print(e.message)

아무 일도 일어나지 않으면 인쇄됩니다. 말하기: 데이터베이스 버전 MySQL은 지원되지 않습니다.
Stackoverflow에서 답을 찾았습니다. 'mysql' 버전은 pandas 버전 0.19에서 더 이상 사용되지 않습니다.

다른 방법을 시도해 보겠습니다.

reload(sys)
sys.setdefaultencoding('utf-8')
host = '127.0.0.1'
port = 3306
db = 'world'
user = 'root'
password = '123456'

engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % (user, password, host, db))

try:
    df = pd.read_sql(sql=r'select * from city', con=engine)
    df.to_sql('test',con=engine,if_exists='append',index=False)
except Exception as e:
    print(e.message)

실행 후 ok, DataFrame의 인덱스를 컬럼으로 저장할지 여부를 나타내는 index 매개 변수를 저장하면 일반적으로 필요하지 않으므로 값이 False로 할당됩니다. 문제가 해결되었지만 여전히 작은 문제가 있습니다.

중국어(내 창)가 포함된 csv 파일이 있다고 가정합니다.

이름 연령 클래스
Xiao Ming 15, 1학년
Xiao Zhang 18, 3학년

engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s") % (user, password, host, db))

try:
    df = pd.read_csv(r'C:\Users\xx\Desktop\data.csv')
    print(df)
    df.to_sql('test', con=engine, if_exists='append', index=False)
except Exception as e:
    print(e.message)

문자는 다음과 같습니다. 인쇄 후 깨졌습니다. csv를 읽을 때 인코딩을 지정하는 것이 가장 좋습니다. 내 로컬 GBK:
df = pd.read_csv(r'C:\Users\xx\Desktop\data.csv',encoding='gbk')

정보를 정상적으로 인쇄할 수 있지만 오류가 다시 보고됩니다.

UnicodeEncodeError: 'latin-1' 코덱은 0-1 위치의 문자를 인코딩할 수 없습니다: 서수가 범위(256)에 속하지 않습니다

아직 인코딩 문제입니다. 저장 시 인코딩을 지정하지 않았기 때문입니다. 데이터베이스에 넣습니다. 이 문제를 해결하려고 할 때 나도 속았습니다. 인터넷에 있는 모든 것이 가능합니다. 프로세스에 대해서는 이야기하지 않고 코드를 살펴보겠습니다.

engine = create_engine(str(r"mysql+mysqldb://%s:" + '%s' + "@%s/%s?charset=utf8") % (user, password, host, db))

해결됨

관련 기사:

Pandas for Python 데이터에 대한 실제 IP 요청에 대한 자세한 설명 분석

Python의 pandas 라이브러리를 통한 cdn 로그 분석에 대한 자세한 설명

Python의 pandas 프레임워크를 사용하여 Excel 파일의 데이터를 조작하는 방법에 대한 튜토리얼

위 내용은 Python은 Pandas를 사용하여 CSV 파일을 읽고 MySQL에 씁니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.