在ETL,如果大家数据权限比较大的时候,可以做很多的数据清洗工作,就是个苦差事

    1. import pymysql
    2. import pandas as pd
    3. from sqlalchemy import create_engine
    4. sql = "select * from company"
    5. engine = create_engine('mysql+pymysql://root:mysql@localhost:3306/data?charset=utf8')
    6. df = pd.read_sql(sql,engine)
    7. df
    8. 字符串的format()函数,该方法收集位置参数和关键字参数的任意集合,并使用它们的值来替换字符串中的占位符;
    9. 形式为{n}(n为整数)的占位符将被format()方法第n个参数所代替;
    10. 形式为{name}的占位符将被参数中为name的参数所替代;
    11. 如果要用format()输出{xx},必须使用{{xx}},否则会因为找不到对应的参数值而报错;
    12. 灵活使用字符串:一方面用+/&拼接起来,一方面用format
    13. def reader(query,db='data'): # reader读取器
    14. sql = query
    15. engine= create_engine('mysql+pymysql://root:mysql@localhost:3306/{0}?charset=utf8'.format(db))
    16. df = pd.read_sql(sql,engine)
    17. return df
    18. df_company = reader("select * from company")
    19. reader('show tables')
    20. df_dataanalyst = reader('select * from dataanalyst')
    21. # 表连接
    22. merged = pd.merge(df_dataanalyst,df_company,on = 'companyId')
    23. merged
    24. # 得到结果
    25. result = merged.groupby(['city','companyFullName']).count()['positionId'].reset_index()
    26. result.head()
    27. # 更改数据类型
    28. result.info() # 写入到数据库之后,city数据类型成为了text
    29. # 写入数据库
    30. result.to_sql(name='newtable2',con='mysql+pymysql://root:mysql@localhost:3306/data?charset=utf8',
    31. if_exists='append',index = False)
    32. # name,con,schema=None,if_exists='fail',index=True,index_label=None,chunksize=None,dtype=None
    33. # name:数据库的表名(可新可老)
    34. # con:链接
    35. # schema:写好的链接器里已经设置好,用于创建数据库对象,基本上都是使用默认值
    36. # if_exists:三个模式:fail,若表存在,则不输出;replace:若表存在,覆盖原来表里的数据;一般用append:若表存在,将数据写到原表的后面;若表不存在则新建一张表。默认为fail
    37. # index:是否将这个数据框的index列写入到数据库,单独写一列,一般不写入
    38. # 要注意这个append,执行次数不要多了
    39. # 数据框此时写入数据库,但是和我们想的数据表的形式可能不同
    40. # 建议先从数据库建表,然后再写入数据
    41. # id:INT,PK,NN,AI
    42. # city:VARCHER(45),中国的城市一般占不了多少20也可以;如果是公司名字,很长的话可以改为100
    43. # 其他数值类型 INT默认11就行
    44. # 写入的时候,可以比表里的字段少,但是不能多;少了会自动为NULL,多了则会报错(会产生ETL的错误)
    45. # 数值为不为空,建表的时候就会设置好
    46. ETL的简单操作已经闭环了
    47. # 比如每天都有两三张表要去进行数据清洗,或者想要去生成一个csv,我们都能通过这么一个简单的操作,利用pandas的功能,把整个环节都搞定
    48. result.to_csv('newtabke2.csv')
    49. # 生成csv反而会简单不少