python的excel函数_Python玩转Excel(第1期)~只发干货

工作中,大家经常会使用excel去处理数据以及展示,但是对于部分工作我们可以借助程序帮忙实现,达到高效解决问题的效果,比如将接口返回的json解析并保存结果到excel中,按一定规律处理excel中的数据然后写入到新的excel文件中,汇总来自多个文件的内容到一个excel中等等。平时在工作中遇到比较繁琐的数据需要写入到excel中,除非excel的内置公式可以处理,否则我会第一时间想到使用python处理。

在处理海(大)量数据时,用Excel处理可能不会那么方便操作,特别是列很多,一屏显示不全的话,操作起来确实不便。如果我们能够熟练掌握Python操作Excel,便可大大提高工作效率。

从今天起,写一个Python玩转Excel系列教程,全干货

,希望对小伙们学习有所帮助。

b11f0664-1465-4a8d-a387-cba127dbbeb8

一、好用到爆的自动填充功能

下面我们模仿Excel,用Pandas实现函数自动填充功能,计算列。读取文件,计算总价

import pandas as pd

#读取Excel文件

books = pd.read_excel('book1.xlsx',index_col='ID')

print(books)

************************

NAME1 单价 数量 总价

ID

1 Book1 10.5 10 NaN

2 Book2 11.0 10 NaN

3 Book3 11.5 10 NaN

4 Book4 12.0 10 NaN

在Excel里面,我们可以写函数,自动填充,也比较方便。

但在Python里只需要一行代码即可,虽然这看起来似乎还是没有Excel速度快,操作方便,但当数据量很大的时候,且计算比较繁琐的时候,pandas数据操作优势就凸显出来了。

1. books['总价']=books['单价']*books['数量']

也可以使用下面的语句实现,显然上面方法比较简单,但下面方法很适合于从某一段开始计算。

2. for i in books.index: books['总价'].at[i]=books['单价'].at[i]*books['数量'].at[i]

运行结果:

NAME1 单价 数量 总价

ID

1 Book1 10.5 10 105.0

2 Book2 11.0 10 110.0

3 Book3 11.5 10 115.0

4 Book4 12.0 10 120.0

下面,我们给每本书涨2块钱

第一种方法:

books['单价']= books['单价']+2

第二种方法:使用lambda表达式

books['单价']=books['单价'].apply(lambda x:x+2)

NAME1 单价 数量 总价

ID

1 Book1 12.5 10 105.0

2 Book2 13.0 10 110.0

3 Book3 13.5 10 115.0

4 Book4 14.0 10 120.0

二、只要你乐意,怎么排都行。

数据排序,函数sort_values用法:

DataFrame.sort_values(by='##',axis=0,ascending=True, inplace=False, na_position='last')

参数说明:

参数 说明

by 指定列名(axis=0或'index')或索引值(axis=1或'columns')

axis 若axis=0或'index',则按照指定列中数据大小排序;若axis=1或'columns',则按照指定索引中数据大小排序,默认axis=0

ascending 是否按指定列的数组升序排列,默认为True,即升序排列

inplace 是否用排序后的数据集替换原来的数据,默认为False,即不替换

na_position {'first','last'}, 设定缺失值的显示位置

下面我们对价格降序排列

import pandas as pdproducts = pd.read_excel('book2.xlsx',index_col='ID')

products.sort_values(by='价格',inplace=True,ascending=False)

print(products)

划重点

:如果需要对满足两个条件的排序,by=[list]列表即可,是不是也很简单

products.sort_values(by=['是否值得购买','价格'],inplace=True,ascending= [True,False])

运行结果:

ID 商品 价格 是否值得购买

10 product10 201 no

5 product5 65 no

7 product7 45 no

9 product9 199 yes

8 product8 156 yes

3 product3 123 yes

4 product4 111 yes

1 product1 100 yes

2 product2 88 yes

6 product6 76 yes

三、绘图前准备工作,数据筛选和过滤(loc函数)

apply函数介绍

apply函数是pandas里面所有函数中自由度最高的函数。该函数如下:DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds)该函数最有用的是第一个参数,这个参数是函数,相当于C/C++的函数指针。这个函数需要自己实现,函数的传入参数根据axis来定,比如axis = 1,就会把一行数据作为Series的数据 结构传入给自己实现的函数中,我们在函数中实现对Series不同属性之间的计算,返回一个结果,则apply函数 会自动遍历每一行DataFrame的数据,最后将所有结果组合成一个Series数据结构并返回。

目标:读取学生信息表,筛选出符合年龄段(18岁到20岁)和成绩段(85分到100分)的学生。

import pandas as pd

def age18_20(age):

#18<=age<=20 Python特有写法

return 18<=age<=20

def level_s(score):

return 85<=score<=100

stu = pd.read_excel('students.xlsx',index_col='ID')

stu=stu.loc[stu['年龄'].apply(age18_20)].loc[stu['成绩'].apply(level_s)]

print(stu)

运行结果:

姓名 年龄 成绩

ID

5 李2 18 88

8 王3 19 86

大家可以优化上面代码,使用 lambda表达式,尽量不使用函数,显得代码简洁、高效和高大上。

四、高大上的数据可视化

53b111ce70db4242af1082c8f34eb661

import pandas as pd

import matplotlib.pyplot as plt

#读取数据

stu = pd.read_excel('students.xlsx',index_col='ID')

#排序

stu.sort_values(by='成绩',inplace=True)

#生成柱状图

stu.plot.bar(x='姓名',y='成绩',color="orange",title='学生成绩表')

#或 plt.bar(stu['姓名'],stu['成绩'],color="orange")

#紧促显示

plt.tight_layout()

#显示图片

plt.show()

下一期再见。。。。。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值