1. 首先导入需要的包
# encoding:utf-8
import pandas as pd
import os
from openpyxl import load_workbook
import xlwt
import shutil
from xlutils.copy import copy
2. 导入excel中需要处理的sheet页可以精确到具体的列
#打印表头及第3列和第5列
df=pd.read_excel("./xxx.xlsx",sheet_name="sheet1",header=1,usecols=[3,5])
#print(df)
2.1 删除2列都为nan的行
#按行统计,有nan的数量:0,1,2(2为要删除的行)
df['df']=df['$第3列列名'].isnull()*1+df['$第5列列名'].isnull()*1
#过滤掉2列都为nan的行
data=df[df.ix[:,'df']<2].ix[:,:2]
"""
中间省略一些数据的处理过程,与本文无关。
"""
3. 把处理后的data转成Dataframe,然后导出
df1R=pd.DataFrame(data)
#print(type(df1R))
4. 保存csv格式
df1R.to_csv(os.getcwd()+"./new.csv")
或者简写df1R.to_csv("./new.csv")
5. 保存多个sheet页,新建excel时可以使用,否则会覆盖之前数据
work=pd.ExcelWriter('excel_output.xls')
df1R.to_excel(work,sheet_name='biubiu4')
df1R.to_excel(work,sheet_name='sheet11',header=0,index=False) #header=0没有表头
work.save()
6. 如果是需要保留之前的sheet页,可以在之前Exel文件里面新增sheet,然后写入文件
6.1 复制一个上面生成的文件进行环境模拟测试
shutil.copyfile(os.getcwd()+'./excel_output.xls',os.getcwd()+'./excel_output_bak.xls')
6.2 复制原有表
filename = 'excel_output_bak.xls'
wb = xlrd.open_workbook(filename)
newb=copy(wb)
6.3 新增sheet页,参数是该sheet的名字,可自定义
wbsheet=newb.add_sheet('sheet21')
6.4 向新sheet中写入数据。 先添加表头,因为测试数据只有一列,若实际环境有多列可自行添加。
wbsheet.write(0,0,'new')
6.5 在新的sheet页写入数据,df1R为上文的DataFrame数据
if df1R.shape[0] > 1:
for i in range(df1R.shape[0]):
wbsheet.write(i + 1, 0, df1R.iloc[i, 0])
if df1R.shape[1] > 1:
for j in range(1,df1R.shape[1]):
wbsheet.write(i+1,j,int(df1R.iloc[i,j]))
6.6 保存
newb.save(os.getcwd()+'./excel_output_bak.xls')