Excel数据整合-python自动化

本文示例程序的功能是将定期更新的多个固定格式表格(内含多个sheet页,每个sheet页数据格式也固定)数据整合成一张结构化表格。仅做个人积累记录使用,如有侵权或不合规请及时联系处理~

1、整合前历史表格预览

存放在一个文件夹中的历史表格,每个表格名称除日期部分按期变更,名称中其他部分保持不变。

打开每个表格数据格式如下所示(已清空涉敏数据),内含多个sheet页,每个sheet数据格式相同。

2、整合后表格预览

经过python自动化处理脚本整合后的表格(已清空涉敏数据),仅为一个表格一个sheet页。

3、python自动化处理脚本

import time
import os.path
import pandas as pd
from sqlalchemy import create_engine
import psycopg2



start =time.clock()

#待整合的表格文件存放路径
path = "D:/mywork/data/整合前"

#初始化一个空的dataframe
df = pd.DataFrame(columns=['单位','年月','年份','月份','序号', '行业','完成减少户数w','完成减少容量wkW','10kV及以上完成减少户数w','10kV及以上完成减少容量wkW','10kV以下完成减少户数w','10kV以下完成减少容量wkW'])

#获取path目录下的所有表格名,只允许存待整合的表格文件
file_name=os.listdir(path)
for i in file_name:   
    ny0=i[0:4]+i[5:7] #提取年月str
    ny=pd.to_datetime(ny0, format='%Y%m') #日期转换
    nf=int(i[0:4]) #提取年份int
    yf=int(i[5:7]) #提取月份int
    
    #读表格获取sheet名称
    file_path=path+'/'+i              
    table = pd.read_excel(file_path, sheet_name=None)
    sheet_name=list(table.keys())
    #剔除不需要的sheet
    index_to_delete = [0,15]
    sheet_name=[sheet_name[i] for i in range(0, len(sheet_name), 1) if i not in index_to_delete]
    #读sheet获取数据    
    for j in sheet_name:  
        print("正在读取 " + ny0 + ' ' + j)
        sheetdata0=table[j]       
        #指定行和列获取数据
        sheetdata=sheetdata0.iloc[8:141,[0,1,14,15,16,17,18,19]]
        #创建列名
        sheetdata.columns = ['序号', '行业','完成减少户数w','完成减少容量wkW','10kV及以上完成减少户数w','10kV及以上完成减少容量wkW','10kV以下完成减少户数w','10kV以下完成减少容量wkW']
        #添加辅助列
        sheetdata['统计类型']='当期'
        sheetdata['单位']=j
        sheetdata['年月']=ny
        sheetdata['年份']=nf
        sheetdata['月份']=yf  
        
        #union每个表格每个sheet数据    
        df = pd.concat([df, sheetdata], ignore_index=True)

#地市名称映射
df['地市']=df['单位']

dsys={
'鄂州供电公司':'鄂州市',
'恩施供电公司':'恩施土家族苗族自治州',
'黄冈供电公司':'黄冈市',
'黄石供电公司':'黄石市',
'荆门供电公司':'荆门市',
'荆州供电公司':'荆州市',
'神农架林区供电公司':'神农架林区',
'十堰供电公司':'十堰市',
'随州供电公司':'随州市',
'武汉供电公司':'武汉市',
'咸宁供电公司':'咸宁市',
'襄阳供电公司':'襄阳市',
'孝感供电公司':'孝感市',
'宜昌供电公司':'宜昌市',
'湖北省电力公司':'湖北省'
      }

for k,v in dsys.items():
    df.loc[df['单位'] == k,'地市'] = v

#字段数据类型强制转换
szlx=['完成减少户数w','完成减少容量wkW','10kV及以上完成减少户数w','10kV及以上完成减少容量wkW','10kV以下完成减少户数w','10kV以下完成减少容量wkW']
for i in range(0,len(szlx)):
    df[szlx[i]]=pd.to_numeric(df[szlx[i]], errors='ignore')
    
    
#存储至python脚本所在路径
df.to_excel('整合后.xlsx')

#存储至本地数据库
engine =create_engine('postgresql+psycopg2://postgres:pass@word@localhost:5432/postgres')

try:
    df.to_sql('ds_fhy_ykdqjs',engine,schema='yxyw',index=False,if_exists='replace')
except Exception as e:
    print(e)


end = time.clock()
print('Running time: %s Seconds'%(end-start))

​​​​​​​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值