Python玩转Excel:实现函数自动填充、数据排序

工作中,大家经常会使用excel去处理数据以及展示,但是对于部分工作我们可以借助程序帮忙实现,达到高效解决问题的效果。

比如将接口返回的json解析并保存结果到excel中,按一定规律处理excel中的数据然后写入到新的excel文件中,汇总来自多个文件的内容到一个excel中等等。

平时在工作中遇到比较繁琐的数据需要写入到excel中,除非excel的内置公式可以处理,否则我会第一时间想到使用python处理。

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

好用到爆的自动填充功能

下面我们模仿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函数是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表达式,尽量不使用函数,显得代码简洁、高效和高大上。

高大上的数据可视化

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()

在学习Python的道路上肯定会遇见困难,别慌,我这里有一套学习资料,包含40+本电子书,800+个教学视频,涉及Python基础、爬虫、框架、数据分析、机器学习等,不怕你学不会! https://shimo.im/docs/JWCghr8prjCVCxxK/ 《Python学习资料》

关注公众号【Python圈子】,优质文章每日送达。

Python玩转Excel:实现函数自动填充、数据排序_第1张图片

你可能感兴趣的:(Python玩转Excel:实现函数自动填充、数据排序)