用python处理excel和word并生成工作报告

python处理excel

 ###########################################
#写入excel
import pandas as pd
#DataFrame 数据帧 相当于工作簿中的一个工作表
df = pd.DataFrame({
 	'id':[1,2,3],
 	'name':['张三','李四','王五'],
 	'age':[11,12,13]
 	})
# 自定义索引,不然pandas会使用默认索引(1,2,3...),会导致生成的工作表中也存在这些索引
df = df.set_index('id')
print(df)
#把数据写入.xlsx为结尾的文件中
df.to_excel('people.xlsx')
print('Done')

#############################################
#读取excel
# header = 2表示从第三行开始(从0开始),跳过了前两行,sheet_ name指定读取的工作表
people = pd.read_excel('people.xlsx', header=2, sheet_name='Sheet1')
#输出列名
print(people.columns)
#如果读入的Excel中没有开头标题,则可以将header=None,人为的进行设置
people = pd.read_excel( 'people. xlsx', header=None)
people.columns = ['id','name','age']
print(people.columns )
#指定id列为索引
people2 = pd.read_excel('people.xlsx',index_col='id')
#输出前5行,此时就不会产生默认索引了
print(people.head())
# skiprows开头跳过几行与header方法类似,usecols 使用那些列中的数据,dtype设置某一列的类型
peoples = pd.read_excel('people.xlsx', skiprows=4, usecols='E:H',dtype= {'ID':str, 'gender' :str, 'birthday':str})

#############################################
#对读取的数据排序
students = pd.read_excel('1.xlsx',sheet_name='Sheet1')
#sort_values 按值排序,by针对哪列,ascending=False代表从小到大,inplace=True表示在原来数据上修改,不需要新的数据接收
students.sort_values(by='Score',ascending=False,inplace=True)
print(students)

python绘制柱状图

#############################################
#pandas绘制柱状图
import pandas as pd
import matplotlib.pyplot as plt
students = pd.read_excel('people.xlsx')
students.sort_values(by= 'Score',inplace=True, ascending=False )
#直接使用plt.bar( )绘制柱状图
plt.bar(students.Name,students.Score,color='orange')
#设置标题、x轴名称与y轴名称,fontsize 设置字号
plt.title('Student Score',fontsize=16)
plt.xlabel('Name')
plt.ylabel('Score')
#因为x轴字体太长,利用rotation 将其旋转90度,方便显示
plt.xticks(students. Name, rotation='90')
#紧凑型布局(因为x轴文字比较长,为了让其显示全,使用紧凑型布局)
plt.tight_layout( )
plt.show( )

#添加中文字体支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"字体的路径,以.ttc结尾", size=16)
plt.title('学生分数', fontproperties=font)
plt.xlabel('名字', fontproperties=font, fontsize=14)
plt.ylabel('成绩', fontproperties=font, fontsize=14)


#############################################
#pandas绘制叠加柱状图
import pandas as pd
import matplotlib.pyplot as plt
users = pd.read_excel('people.xlsx')
#新计算出一个总量,用于排序
users['Total'] = users['Jan']+users['Feb']+users['Mar']
#排序
users.sort_values(by='Total',inplace=True )
#水平的叠加柱状图,barh中的h表示horizontal水平的,
#利用stacked 就可以实现叠加形式
users.plot.barh(x='Name', y=['Jan','Feb','Mar'], stacked=True )
plt.tight_layout( )
plt.show( )

python处理word

#############################################
#python操作word 
#首先需要安装python-docx包
from docx import Document
from docx.shared import Inches
document=Document()
document.save('new.docx')

document = Document()
document.add_paragraph('这是一个段落')#添加段落
document.add_heading('这是一个标题', level=1)#添加标题
document.add_page_break() # 分页符 
table = document.add_table(rows=6, cols=6)
cell = table.cell(0,2)#第一行第三列
cell.text = '第一行第三列'
row = table.rows[1]#第二行
row.cells[0].text = '第二行第一列'
row.cells[1].text = '第二行第二列'
document.add_picture('header.jpg ',width=Inches(1.25))#添加图片,指定大小

把execl中的数据整理写入word(小实验)

import pandas as pd
import matplotlib.pyplot as plt
from docx import Document
from docx.shared import Inches

imgname = 'test.jpg'
students = pd.read_excel('1.xlsx')
students.sort_values(by='Score', inplace=True, ascending=False)
#直接使用plt.bar( )绘制柱状图
plt.bar(students.Name,students.Score,color='orange')
#设置标题、x轴名称与y轴名称,fontsize 设置字号
plt.title('Student Score',fontsize=16)
plt.xlabel('Name')
plt.ylabel('Score')
#因为x轴字体太长,利用rotation 将其旋转90度,方便显示
plt.xticks(students. Name, rotation='90')
#紧凑型布局(因为x轴文字比较长,为了让其显示全,使用紧凑型布局)
plt.tight_layout( )
#保存图片
plt.savefig(imgname)

#找到排名第一的学生
print('原始students:',students)
#通过下面去获取,虽然排序,但下标并没有改变,所以并没有获取到排在第一的同学
print(students.Name[0])
#方法一:iloc通过绝对位置去获取数据
print( students.iloc[0,:]['Name'])
#方法二:重新排列标签
students.reset_index(drop=True, inplace=True)
print( '重排列后的student:' , students )
#会通过下标去取值,不是排序后的内容
print(students['Name'][0])


document = Document()
document.add_heading('数据分析报告', level=0)
first_student = students.iloc[0,:][ 'Name' ]
first_score = students.iloc[0,: ][ 'Score' ]

p = document.add_paragraph('分数排在第一的学生是:')
p.add_run(str(first_student)).bold = True
p.add_run(', 分数是')
p.add_run(str(first_score)).bold = True
b1 = document.add_paragraph(f'总共有{len(students.Name)}名学生参加了考试,考生情况如下')
table =document.add_table(rows=len(students.Name)+1,cols=2)

#设置表格样式
table.style = 'LightShading-Accent1'
table.cell(0,0).text = '学生姓名'
table.cell(0,1).text = '学生成绩'
for i,(index,row) in enumerate(students.iterrows()):
    table.cell(i+1,0).text = str(row[ 'Name' ])
    table.cell(i+1,1).text = str(row[ 'Score' ] )

document.add_picture(imgname)
document.save( 'Students.docx' )
print( 'Done!!!' )

实验结果

1.xlsx
在这里插入图片描述
在这里插入图片描述

今天也是爱zz的一天哦!

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值