使用dataframe拆分数据库

最近在做数据采集过程中,有一些数据采集下来之后是用逗号分割开的,需要拆分成两条,类似:

idlocationuniversitydegree_nameprogramme_enurl
25564Perth,AlbanyWestern AustraliaMaster of Curatorial StudiesCuratorial Studies in Fine Artshttps://study.uwa.edu.au/courses/master-of-curatorial-studies-in-fine-arts

这是一所学校的一个专业但是location中有两个值,所以需要拆分为两条,但在采集过程中没有完成拆分,需要用python脚本进行拆分。具体代码如下:

import numpy as np
import pandas as pd
import pymysql
from sqlalchemy import create_engine
conn = pymysql.connect(host='localhost',port = 3306,user='root',passwd='123456',db ='major_test',charset='utf8')

#将数据表的dataframe转换为拆分后的dataframe
def tidy_split(df,column,sep=','):
    indexes = []
    new_values = []
    for i,presplit in enumerate(df[column].astype(str)):
        values = presplit.split(sep)
        for value in values:
            value  = value.strip()
            indexes.append(i)
            new_values.append(value)

    new_df = df.iloc[indexes,:].copy()
    new_df[column] = new_values
    new_df.index = [i for i in range(new_df.shape[0])]
    return new_df


#将数据库转化为dataframe格式
def read_table(cur,sql_order):
    try:
        cur.execute(sql_order)
        data = cur.fetchall()
        col_result = cur.description
        columns = []
        for i in range(len(col_result)):
            columns.append(col_result[i][0])
        frame = pd.DataFrame(list(data),columns=columns)
    except Exception as e:
        frame = pd.DataFrame()
    return frame

#执行方法,可修改column和sep参数,叠加修改可以修改engine,column和sep参数并且修改生成的新表名称
def main():
    cur = conn.cursor()
    sql_order = 'select * from tmp_school_uk_yuke_xinzeng'
    result = read_table(cur, sql_order)
    new_result = tidy_split(result, column='location', sep=',')
    engine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/major_test?charset=utf8')
    new_result.to_sql('tmp_ok', engine)
    conn.commit()


if __name__ == '__main__':
    main()


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值