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!!!' )
实验结果
今天也是爱zz的一天哦!