python excel多sheet存储,同sheet不覆盖追加数据

1.多sheet存储

方式一:读取数据库并存入excel多个sheet

import cx_Oracle
import pandas as pd
conn_oracle = cx_Oracle.connect('user','passwd','ip:port/db')
cur_oracle = conn_oracle.cursor()
result = pd.read("sql")
result1 = pd.read("sql1")
writer = pd.ExcelWriter(r'C:\\Users\\admin\\Desktop\\XXX.xlsx')
result.to_excel(writer,sheet_name='XXX') 
###不保存索引result.to_excel(writer,sheet_name='XXX',index=False) 
###指定索引result.to_excel(writer,sheet_name='XXX',index=["a","b","c"],columns=["one","two","three"])                          
result1.to_excel(writer,sheet_name='XXX')
writer.save()
writer.close()

方式二:读取excel并进行计算存入excel多个sheet

###写入结果的表
writer = pd.ExcelWriter(r'C:\Users\admin\Desktop\XXX.xlsx')
###读取需要处理的数据
data = pd.read_excel(r'C:\Users\admin\Desktop\XXX.xlsx')
print(data)
###条件筛选
a=data['xxx'].drop_duplicates()
###数据处理
for i in a:
    da = data[data['xxx]==i]
    print(da)
    ###累计求和
    da['新增列名']=da['xxx'].sort_values(ascending=False).cumsum()
    ###求占比
    da['新增列名']=da['xxx']/da['xxx'].sum()
    print(da)
    ###存入excel
    da.to_excel(writer,sheet_name='%s'%i)
writer.save()
writer.close()
2.同sheet覆盖追加数据

2.1按sheet读取数据

import xlrd
sale=xlrd.open_workbook(r'C:\Users\admin\Desktop\result2.xlsx')
names = sale.sheet_names()
name_l = len(names)
print(name_l)
for i in range(name_l):
    table = sale.sheets()[i]
    nrows = table.nrows
    a = [] 
    for i in range(nrows):
        a.append(table.row_values(i))
    print(a)

2.2 数据追加

import openpyxl
    data = openpyxl.load_workbook('excel_test.xlsx')
    # 取第一张表
    sheetnames = data.get_sheet_names()
    table = data.get_sheet_by_name(sheetnames[0])
    table = data.active
    print(table.title) # 输出表名
    nrows = table.max_row # 获得行数
    value = a
    index = len(value)
    for i in range(0, index):
        for j in range(0, len(value[i])):
            table.cell(row=i+nrows, column=j+1, value=str(value[i][j]))
        data.save('excel_test.xlsx')
    print("xlsx格式表格追加数据成功!")

数据追加完整代码

import xlrd
import openpyxl

sale=xlrd.open_workbook(r'C:\Users\admin\Desktop\result2.xlsx')
names = sale.sheet_names()
name_l = len(names)
for i in range(name_l):       
    table = sale.sheets()[i]
    nrows = table.nrows
    a = [] 
    for i in range(nrows):
        a.append(table.row_values(i))
    data = openpyxl.load_workbook('excel_test.xlsx')
    # 取第一张表
    sheetnames = data.get_sheet_names()
    table = data.get_sheet_by_name(sheetnames[0])
    table = data.active
    print(table.title) # 输出表名
    nrows = table.max_row # 获得行数
    value = a
    index = len(value)
    for i in range(0, index):
        for j in range(0, len(value[i])):
            table.cell(row=i+nrows, column=j+1, value=str(value[i][j]))
        data.save('excel_test.xlsx')
    print("xlsx格式表格追加数据成功!")

pandas常用方法

导入数据
pd.read_csv(filename):从CSV文件导入数据
pd.read_excel(filename):从Excel文件导入数据
pd.read_sql(sql, conn):从数据库导入数据

导出数据
df.to_excel(filename):导出到Excel文件
df.to_sql(sql, conn):导出数据到SQL

查看数据
df.head(n):查看对象的前n行,默认为5行
df.tail(n):查看对象的最后n行
df.shape[]:查看行数和列数 df.shape[0]查看行数,df.shape[1]查看列数
df.describe():查看数值的描述性统计

数据选取
df[‘column_name’]
df[‘column’].sort_values(ascending=False)默认是升序排列,加ascending=False参数为降序
df.groupby(column)
df.groupbu([column1,column2])分组

拼接
result = pd.merge(df1,df2,how=‘left’,left_on=‘column1’,right_on=‘column2’)
how参数为选取什么连接方式,左连还是右连,left_on和right_on分别为两个表关联的字段

xlrd 模块 主要用来读取excel

data = xlrd.open_workbook(filename) #打开Excel文件读取数据
names = data.sheet_names() #返回book中所有工作表的名字
table = data.sheets()[i] #通过索引顺序获取
table = data.sheet_by_index(sheet_indx)) #通过索引顺序获取
table = data.sheet_by_name(sheet_name)#通过名称获取
nrows = table.nrows #获取该sheet中的行数
table.row_values(rowx, start_colx=0, end_colx=None) #返回由该行中所有单元格的数据组成的列表
ncols = table.ncols #获取列表的列数
table.col_values(colx, start_rowx=0, end_rowx=None) #返回由该列中所有单元格的数据组成的列表

openpyxl常用方法

data = openpyxl.load_workbook(‘excel_test.xlsx’)
#取第一张表
data.get_sheet_by_name(sheetnames[0])
#创建新的sheet
my_sheet = data.create_sheet()
#获取当前正在显示的sheet
table = data.active
nrows = table.max_row # 获得行数
ncolumns = table.max_column # 获得列数
table.cell(row=i, column=j, value=str(value[i][j]))#写入数据
data.save(‘excel_test.xlsx’)

发布了45 篇原创文章 · 获赞 1 · 访问量 1764

猜你喜欢

转载自blog.csdn.net/wzj_wp/article/details/103307101