zoukankan      html  css  js  c++  java
  • python pandas从excel中获取数据

    import pandas as pd
    from GZKT.produce import Common as util
    import sys

    util.logger('程序开始时间')

    #第一步:使用pandas读取excel
    io = pd.io.excel.ExcelFile('E://广东空调/test.xlsx')
    #第二步:以第二行作为列名
    data =pd.read_excel(io, sheetname='Sheet1',header=1)

    #第三步:修改列名
    data.rename(columns={data.columns[2]:'属性', data.columns[3]:'明细'}, inplace = True)

    #第四步:将日期列名放入列表,后面统一操作列表即可
    value_vars=[]
    for i in data.columns:
    if i.find('/') !=-1:
    value_vars.append(i)
    if i.find('Unnamed') != -1 or i.find('合计') != -1:
    #如果包含这些列就将其删除
    data.drop([i], axis=1, inplace=True)
    print('多余列删除成功')
    #print(data.columns)
    #第四步:针对指标值,进行空值替换,维度除外
    data[value_vars] = data[value_vars].fillna(0)

    #第五步:进行维度补充===>axis=1 代表对x轴操作,axis = 0 代表对y轴操作,limit参数表示填充多少个
    data = data.fillna(method='ffill',axis=1).fillna(method="ffill",axis=0)
    替换
    data = data.ffill(axis=1).ffill(axis=0)


    #第六步:删除没用的行,删除项目为差/变化点的行
    data.dropna(how='all',inplace=True) #删除所有列都是空的行
    data = data[~data.项目.isin(['差','变化点',''])]

    #第七步:对文字还有特殊字符的进行更正,df.assign(coloname=)对字段重新渲染
    data = data.assign(项目=data.项目.str.replace(' ',''))
    data = data.assign(属性=data.属性.str.replace(' ',''))
    data = data.assign(线体=data.线体.str.replace(' ',''))
    替换
    data[['项目', '属性', '线体']] = data[['项目', '属性', '线体']].apply(lambda x: x.str.replace('
    ', ''))


    #第八步:pd.melt列转行,将日期转成列,并且通过选中的value_vars,筛选指定列
    data = pd.melt(data, id_vars=['线体', '项目', '属性', '明细'],value_vars=value_vars, var_name='日期',value_name='指标值')

    #第九步,对字段顺序进行排序
    sortColumn= ['日期','线体', '项目', '属性', '明细','指标值']
    data=data.loc[:,sortColumn]
    util.logger('sql入库开始时间')

    #使用快速入库的方法
    # 方法一,比较慢
    # pd.io.sql.to_sql(data, 'PAPAGZ_PRODUCE_VISUAL_DATA', Common.getEngine(), if_exists='append', index=False)
    # 方法二
    util.getConn(data,'"PAPAGZ_PRODUCE_VISUAL_DATA"')

    util.logger('入库结束')
    util.logger('程序退出')
    sys.exit()



    #
    # 今天刚试to_sql 在oracle下特慢,后来发现其实慢是因为没设置to_sql的dtype参数 例如这样设置后就特别快了 估计快千百倍
    # def setdtypedict(df): dtypedict = {} for i, j in zip(df.columns, df.dtypes): if "object" in str(j): dtypedict.update({i: VARCHAR(256)}) if "float" in str(j): dtypedict.update({i: DECIMAL(19, 2)}) if "int" in str(j): dtypedict.update({i: DECIMAL(19)}) return dtypedict 使用 dtypedict = setdtypedict(df) pd.io.sql.to_sql(df, name=target_tab_name, con=conntarget, schema=schema, index = False, index_label = 'ID', if_exists='append',#fail append replace dtype=dtypedict, chunksize=10000)
    #




    函数:从一行中过滤信息
    def fun(df, keyList):
    df = pd.DataFrame
    reSer = pd.Series[]
    for i in range(len(df)):
    row = df.loc[i]
    for key in keyList:
    if key in row.values:
    return False
    return True

    --
    Common.py
    ---------------------

    from sqlalchemy import create_engine, engine
    import datetime
    from io import StringIO

    def getEngine():
    db_engine = create_engine('postgresql+psycopg2://'+'gpadmin'+':'+'gpadmin'+'@'+str('10.39.4.175') + '/' + 'pissh')
    return db_engine

    def getConn(df,table_name):
    #获取csvIO
    output = StringIO()
    # ignore the index
    df.to_csv(output, sep=' ', index = False, header = False)
    output.getvalue()
    output.seek(0)
    #获取连接
    engine = getEngine()
    connection = engine.raw_connection() #engine 是 from sqlalchemy import create_engine
    cursor = connection.cursor()
    cursor.copy_from(output,table_name ,null='')
    connection.commit()
    cursor.close()

    def logger(info):
    print('时间:',datetime.datetime.now(),':',info)




    欢迎对it热情的同学,加qq进行技术讨论; QQ:850922253
  • 相关阅读:
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第4章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第3章 读书笔记(待更新)
    Algebra, Topology, Differential Calculus, and Optimization Theory For Computer Science and Machine Learning 第1,2章 读书笔记(待更新)
    Tkinter的Message组件
    Git 实操/配置/实践
    mysq5.7.32-win安装步骤
    行为型模式之模板方法
    结构型模式之组合模式
    结构型模式之享元模式
    结构型模式之外观模式
  • 原文地址:https://www.cnblogs.com/zhangwensi/p/11290352.html
Copyright © 2011-2022 走看看